1、什么是ProtocolBuffer
ProtocolBuffer是由Google开发的一种数据格式。这种格式与平台无关,可用于通讯协议,数据存储等。ProtocolBuffer跟我们常见的XML、json格式的数据比,传输更高效,并且体积更小。在RPC数据交换格式和数据存储领域,ProtocolBuffer具有先天的优势,因此得到很好的应用。
具体请google官方描述:戳这里。
2、在iOS项目中使用ProtocolBuffer库
ProtolBuffer最新的版本是proto3,与老版本proto2还是有一定的区别。
在ProtocolBuffer中所有结构化的数据都被称为message。比如下面是在proto3版本下定义的消息:
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
可以把上面的消息格式生成很多语言支持的类格式,比如:Java,Python、Go等等,具体请google关于描述:戳这里。
关于在Mac上安装ProtocolBuffer,以及利用命令行生成.proto文件,并且生成Objective-C可用的.h和.m文件,在此不做描述,请读者自行google。
下面详细介绍在iOS工程中如何应用ProtocolBuffer库
2.1、下载ProtocolBuffer库
从github上下载:这里
2.2、引入项目
我是采用手工导入的方式加入ProtocolBuffer库的,当然你也可以采用CocoaPods导入。
- 将objectivec目录下的*.h和*m添加到项目。注意:不包括:GPBProtocolBuffer.m。
- 将objectivec/google/protobuf目录下的所有文件添加到项目。
- 把上面提到的.proto文件对应生成的.h 和 .m文件拖到项目。
- 点击project->Build Phases->Compile Source下的关于ProtocolBuffer库的所有.m文件添加:-fno-objc-arc标记。因为生成的类是非ARC的。
经过以上几步,基本上可以在iOS项目中编译成功了。如果读者遇到编译问题,可以自行google或者在评论区说出您的问题,欢迎交流。
3、测试ProtocolBuffer对象的序列化和反序列化
测试就比较简单了,下面是一个简单的例子:
NSLog(@"测试protolbuffer的序列号和反序列化");
MyMessage *mess = [[MyMessage alloc] init];
mess.version = @"1.0";
mess.userId = @"userId";
// 序列号
NSData *data = [mess data];
// 反序列化
MyMessage *p = [MyMessage parseFromData:data error:nil];
NSLog(@"\nversion:%@\nuserid:%@", p.version, p.userId);
可以看出,ProtocolBuffer的序列化是很简单的,只需要调一个data方法的就行,其他的都是ProtocolBuffer库帮我们实现了,同样反序列化也是一样,免除了我们之前做XML解析或Json解析的繁琐过程。一句代码搞定,简单、直接、高效!(完)