Protocol Buffers 是 Google 出品的用来序列化/反序列化数据的工具。原生支持 C++、Java、Python。
如果要在 iOS 上使用 PB,可以直接使用 C++,但是编译过程很麻烦,因此这里使用的是第三方的库。
安装 Protocol Buffers
- 安装 homebrew
1 | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
- 安装 automake、libtool、protobuf。这里安装的 protobuf 是 google 官方版本。
1 | brew install automake |
如果后面的步骤出错了,请确保已经安装了这些工具:automake、autoconf、autoreconf、aclocal、libtool、protoc。其中的 protoc 用来把 .proto 文件编译成 C++、Java 或 Python 代码。
- 编译 protoc-gen-objc。protoc-gen-objc 是 protoc 的一个插件,使其能将 .proto 文件编译成 objective-c 代码。
1 | git clone git@github.com:alexeyxo/protobuf-objc.git |
- 利用 protoc 将 .proto 文件编译成 objective-c 代码。
1 | protoc message.proto --objc_out="." |
如果出现下面的错误:
1 | protoc-gen-objc: program not found or is not executable |
可以尝试:
1 | cp /PATH/TO/protobuf-objc/src/compiler/protoc-gen-objc /usr/local/bin |
在 Podfile 中添加
pod 'ProtocolBuffers', '1.9.2'
然后执行pod install
。将生成的 .h 和 .m 文件添加到工程中,编译。
这里会提示找不到GeneratedMessageProtocol
。你只需要帅气地将其注释掉就行了。
使用
假设有 person.proto 定义如下
1 | message Person { |
通过 protoc 生成 Person.pb.h 和 Person.pb.m 两个文件。
- 序列化
1 | Person* person = [[[[[Person builder] setId:123] |
- 反序列化
1 | NSData* raw_data = ...; |