iOS IM開發准備工作(二)protobuf-objc安裝及使用


  Google Protocol Buffer( 簡稱 Protobuf) 是 Google 公司內部的混合語言數據標准。你在http://code.google.com/p/protobuf/downloads/list 上可以下載 Protobuf 的源代碼(然而需要翻牆訪問)。Protocol Buffers 是一種輕便高效的結構化數據存儲格式,可以用於結構化數據串行化,或者說序列化。它很適合做數據存儲或 RPC 數據交換格式。可用於通訊協議、數據存儲等領域的語言無關、平台無關、可擴展的序列化結構數據格式。目前提供了 C++、Java、Python 三種語言的 API。也就是說OC版本的 Google本身沒有提供,有哥們說,iOS可以直接用C++版本的,不過作為一個0警告的追求者,我不使用它。

  至於為什么用protobuf,說傻一點,boss讓使用的。說高端一點,傳輸效率高,簡潔。其實就是相同的流量可以傳輸更多的數據。據說wechat也是用的這個。

  protobuf-objc在Github上有幾個開源的項目,我用的是這個https://github.com/alexeyxo/protobuf-objc。它里面的Readme寫的還是很不好理解的,至少我進過坑。然后我發現了他 http://protobuf.io/#objc,這里面寫的簡潔,字體也比較舒服(然而這里面的它沒有及時更新,醉了)

安裝下載

第一種是用命令行下載源碼安裝插件,我喜歡這樣的。

第一行  安裝homebrew 這玩意還是比較有用的,安裝一個無妨  如果這行報錯,看看網絡好不好;截圖的地址錯了,應為:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

第二行  安裝automake 下載完源碼你會看到里面有makefile的,懂得人自然就懂了,不懂得就百度一下咯

第三行  安裝libtool  一個通用庫支持腳本,就看做GCC吧,還是為了make。不懂的還是問度娘

第四行  安裝protobuf 

第五行  這一行命令你最好敲一下,不然你會后悔的 后面括號里面的就別輸入命令行了

第六行  這個比較費時間;截圖的地址又改了,應為:git clone https://github.com/alexeyxo/protobuf-objc.git

第七行  這是編譯指令,需要你進入你根目錄里面 下載好的那個protobuf-objc文件夾里面去執行,截圖又是錯的,(我也是醉了) 應為:./scripts/build.sh

第八行  這一行是讓你 把根目錄下那個protobuf-objc文件夾里面的src目錄下的runtime 里面的 這個ProtocolBuffers.xcodeproj項目 直接拖到你的項目里面去,(copy items) 

 

第二種CocoaPods不適合我這種直接的人+_+。。。

第一個方法的1到7 還是要的 后面3行 用pods的如果你不懂的話,面壁思過吧。。。

第三種 其實我發現的更直接的方法,在http://protobuf.io/#objc直接下載最頂上的壓縮包

我不推薦這么做。如果你這么做失敗了,那你還是前兩種吧。。。

 

編譯.proto

  安裝好的,畢竟只是工具,用起來才行。proto的語法我就不說了,太多。我這里假設有人給了你.proto文件,現在你需要把他轉成objc文件。

首先打開終端 cd到Desktop,這樣便於觀察操作結果;

然后輸入這行 protoc --plugin=/usr/local/bin/protoc-gen-objc person.proto --objc_out=“./pbDir” 

  紅色的是你的proto文件 我默認放在桌面了;藍色的是你生成的文件要存放的目錄  其中./是指當前目錄下  pbDir  是我新建的文件夾 用來存放生成的objc文件的

  每個proto文件會生成兩個文件 一個.h  一個.m

最后將你的生成的文件 拖到你的項目里面去 然后就可以用了。

 

簡說proto的Message

  proto文件里面每一個包都是一個message。我寫一個比較全的例子,說明一下。

 1 message MTMsg 
 2 {
 3     enum Type
 4     {
 5         ax = 0;
 6         ay = 1;
 7         aa = 2;
 8         ab = 3;
 9     }
10     required Type ntype = 1;
11     repeated TKSMsg objs = 2 ;
12     optional string name = 3 ;
13 }    

  可以看出,這一個message里面 有一個枚舉,是不是很神奇。再看第一個變量 它是一個枚舉類型的字段,前面的required表示它是必填字段;第二個變量,是一個自定義的TKSMsg(它也是一個message),前面的repeated表示他是一個數組類型;最后一個是一個字符串string,optional表示他是可選字段。

  編譯出來后,這段message會變得很大,我就不貼出來了。

  編譯后,你可以用XXXBuilder 來alloc出來一個實例a,對這個a的屬性賦值。然后用這個a.build 給出一個XXX的實例b。這個b可以用來傳輸。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM