用途
protocolbuffer(以下簡稱PB)是google 的一種數(shù)據(jù)交換的格式,它獨(dú)立于語言,獨(dú)立于平臺。google 提供了多種語言的實現(xiàn):java、c++、go 和 python,每一種實現(xiàn)都包含了相應(yīng)語言的編譯器以及庫文件。由于它是一種二進(jìn)制的格式,比使用 xml 進(jìn)行數(shù)據(jù)交換快許多??梢园阉糜诜植际綉?yīng)用之間的數(shù)據(jù)通信或者異構(gòu)環(huán)境下的數(shù)據(jù)交換。作為一種效率和兼容性都很優(yōu)秀的二進(jìn)制數(shù)據(jù)傳輸格式,可以用于諸如網(wǎng)絡(luò)傳輸、配置文件、數(shù)據(jù)存儲等諸多領(lǐng)域(以上是復(fù)制的百度....一般都是用在網(wǎng)絡(luò)通訊時序列化反序列化用的)。
1.首先你得知道要用到brew 干啥的可以去這看看
打開終端 萬一你已經(jīng)安了呢 輸入:
brew -v
結(jié)果如果是這個 那就是沒安 終端都不知道你說的是啥 哈哈
-bash: brew: command not found

人家寫的很明白了 終端輸入這個
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
終端會往下走。。。 到箭頭這兩步時會停 第一個停你就得按return鍵 按其他鍵就終止了(那英文就那么寫的 abort這詞真形象流產(chǎn) 夭折.... ) 第二個讓你輸入你電腦的密碼

看到這個你就成功了

在看看版本就有了吧
brew -v
Homebrew 1.1.12
2.該安裝所需的東西了 一個個的安就好
brew install automake
brew install libtool
brew install protobuf
3.該安裝oc語言所需的東西了google/protobuf 地址下載這個文件夾

在下面找到oc版本的安裝鏈接

安裝方式在這 就是運(yùn)行下載好的full_mac_build.sh

直接找到文件 拖到終端 回車 就開始安裝了

終端安裝

這個過程我彈出了這個 點(diǎn)了好不影響使用

安裝過程不算長就是滾的東西比較多......

4.安裝完成測試一下把Protocol Buffers 轉(zhuǎn)成oc可用的文件
先找個.proto文件 下載的文件夾中有這個一個文件 就用它了把他轉(zhuǎn)成oc可用的文件

在桌面上建一個文件夾就叫pb吧 把這.proto文件拷貝進(jìn)去(我桌面就這么干凈)

在終端cd到項目文件夾 接著終端輸入下面這行 ./是你本身文件的名字 out=后面是你輸出文件路徑
protoc ./addressbook.proto --objc_out=./
可以看到生成的oc .h 和.m文件了

5.到現(xiàn)在應(yīng)該是安裝完了 來使用一下吧 使用cocoapods 導(dǎo)入 你也可以搜一下版本 安一個3.0以上的版本就好(3.0才正式支持oc)
pod 'Protobuf'
新建個測試項目吧 把剛才生成的.m和.h拖入項目中

編譯會報錯 因為不支持ARC環(huán)境 官方說明 需把關(guān)閉.m文件的ARC 加上這個:-fno-objc-arc


編譯一下 這回應(yīng)該是成功的了 沒有錯誤 該使用了
點(diǎn)開看生成的.h文件 能看出來這里有一個類 類名是Person 有name ,email屬性什么的

就序列化這份Person類對象了 導(dǎo)入.h頭文件 代碼如下
#import "ViewController.h"
#import "Addressbook.pbobjc.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
Person *person1 = [[Person alloc] init];
person1.name = @"庫里";
person1.email = @"403three@icloud.com";
//序列化
NSData *data = [person1 data];
NSLog(@"%@", data);
//反序列化
Person *person2 = [Person parseFromData:data error:nil];
NSLog(@"person2%@", person2);
}
看下結(jié)果 第一個打印的是16進(jìn)制的文件流 第二個打印的是反序列化的對象
說明我們的文件是可用的 可以實現(xiàn)PB內(nèi)對象的序列化以及反序列化
