Protobuf是什么?
Protobuf 即 google protocol buffer 是一種數(shù)據(jù)封裝格式協(xié)議,是google推出
的一種語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、擴(kuò)展性好的用于通信協(xié)議、數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù)串行化方法。支持
C++、Python、Java三種語(yǔ)言。
為什么要使用Protobuf?
在不同平臺(tái)通信的時(shí)候,首先需要將對(duì)象進(jìn)行序列化。iOS平臺(tái)上我們常用NSKeyedArchiver進(jìn)行
歸檔,當(dāng)然也可以將數(shù)據(jù)處理為JSON或者XML格式。NSKeyedArchiver只能在iOS/Mac平臺(tái)使用,
因此它歸檔的二進(jìn)制數(shù)據(jù)不適合于在不同平臺(tái)之間使用。JSON和XML雖然由于容易維護(hù),易讀而應(yīng)用
比較廣泛,但是對(duì)數(shù)據(jù)的利用效率都不是高。這時(shí)候該使用Protobuf了,因?yàn)镻rotobuf的優(yōu)勢(shì)是
效率高,同樣的一份數(shù)據(jù)使用protobuf存儲(chǔ)的時(shí)候更小,更加方便
安裝步驟如下:
一.安裝環(huán)境
1.打開終端
2.查看你的mac上是否安裝了brew
$ brew -v
Homebrew 1.6.8
Homebrew/homebrew-core (git revision d822; last commit 2018-06-12)
這是表明已經(jīng)安裝,如果沒(méi)有安裝,使用下面的命令安裝下
3.安裝brew (使用ruby安裝)
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/
Homebrew/install/master/install)"
4.下載依賴庫(kù)(工具)
$ brew install automake
$ brew install libtool
5.下載Protobuf
$ brew install protobuf
6.克隆protobuf-objc,也就是說(shuō)吧代碼下載到本地
$ cd desktop 我是clone到桌面,你們可以隨便放那
$ git clone https://github.com/alexeyxo/protobuf-objc.git
7.運(yùn)行腳本
$ cd ~/protobuf-objc 切換到clone的目錄
$ ./scripts/build.sh
或者這樣
$ ./autogen.sh
$ ./configure
$ make
# 如果希望安裝protoc,執(zhí)行下面的命令
$ make install
編譯后報(bào)錯(cuò):In file included from objc_helpers.cc:27:./google/protobuf/
objectivec-descriptor.pb.h:17:2: error: This file was generated by
an older version of protoc which is
#error This file was generated by an older version of protoc which is
^
./google/protobuf/objectivec-descriptor.pb.h:18:2: error: incompatible with your
Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers. Please
^
./google/protobuf/objectivec-descriptor.pb.h:19:2: error: regenerate this file
with a newer version of protoc.
#error regenerate this file with a newer version of proton.
......
出現(xiàn)這樣的錯(cuò)誤,不要慌,這是google自己版本的問(wèn)題,我們不用管他,而且也不會(huì)像其他文章說(shuō)的那
樣,生成protoc-gen-objc這個(gè)插件,根本就不會(huì)生成,除非版本是2.6.0,這個(gè)問(wèn)題采用下面的方式
一樣能生成proto文件
二.生成后綴proto的文件
說(shuō)明: 創(chuàng)建 proto 文件指定數(shù)據(jù)格式,可以選擇proto2和proto3格式,它們有些細(xì)微的區(qū)別,在生成代碼的時(shí)候會(huì)提示的,具體情況查看文檔Language Guide proto3。下面使用proto3格式,并且保存為person.proto。
1. 創(chuàng)建文件person.proto
$ cd desktop 我還是切換到桌面
$ touch person.proto
2. 編輯person.proto文件
2.1 使用終端編輯
$ vi person.proto
syntax = "proto3";
message Person{
string name = 1;
int32 age = 20;
enum DeviceType{
iOS = 0;
Android = 1;
}
}
2.2 放到xcode中直接寫(推薦)
三.轉(zhuǎn)化成objc文件
由于我們生成不了protoc-gen-objc,因此使用
protoc --plugin=/usr/local/bin/protoc-gen-objc --objc_out=./ person.proto這種方式是不行的
我們使用 protoc 工具生成Objective-C代碼:
終端輸入: $ protoc --proto_path=A --objc_out=B person.proto
其中--proto_path=后跟A是需要處理的proto文件所在的文件夾,--objc_out=指明生成的是
Objective-C代碼以及目標(biāo)文件存放路徑,B是目標(biāo)文件存放路徑,person.proto是需要處理的文件。
這時(shí)候我們就生成了2個(gè)文件,如下圖

objc-proto文件
導(dǎo)入工程中,這兩個(gè)文件是采用的手動(dòng)引用計(jì)數(shù),因此在加入項(xiàng)目后需要設(shè)置它們的編譯參數(shù)。

設(shè)置
四.項(xiàng)目使用 (下載Protocol Buffers的源碼(下載地址),也可以到官網(wǎng)上下載)
1.使用cocoapods方式導(dǎo)入
pod 'Protobuf' 而不是 pod 'ProtocolBuffers',
使用 pod 'ProtocolBuffers'
下載成功之后,編譯一看,結(jié)果報(bào)錯(cuò)
#import "GPBProtocolBuffers_RuntimeSupport.h"無(wú)法找到

報(bào)錯(cuò)
原因是pods下來(lái)的是不帶GPB的,所以網(wǎng)上說(shuō)的不對(duì),應(yīng)該是用
pod 'Protobuf' ,這樣就沒(méi)有問(wèn)題
2.靜態(tài)庫(kù)引入方式
1.下載Protocol Buffers的源代碼
2.工程里引入ProtocolBuffers_iOS.xcodeproj,或者編譯成靜態(tài)庫(kù).a方式,然后公開頭文件(如圖2)
3.設(shè)置依賴和連接庫(kù)。(如圖3)
4.引入頭文件(如圖4)

圖2

圖3

圖4
參考文章
https://my.oschina.net/kgdugyiy/blog/538333 安裝和使用
https://developers.google.com/protocol-buffers/ 語(yǔ)法方面
https://github.com/google/protobuf/blob/master/src/README.md 官網(wǎng)教程
至于如何使用,下期文章會(huì)詳細(xì)介紹,并提供demo,喜歡的,點(diǎn)下贊,謝謝!