一. protocol buffers 简介
Protobuffer是一个类似JSON的一个传输协议,其实也不能说是协议,可以认为是一种传输数据格式类似JSON,XML。但是比JSON更加轻量。消耗更小的带宽。
跨语言,这是它的一个优点。它自带了一个编译器,protoc,只需要用它进行编译,可以编译成JAVA、python、C++代码,暂时只有这三个,其他就暂时不要想了,然后就可以直接使用,不需要再写任何其他代码。连解析的那些都已经自带有的。JSON当然也是跨语言的,但这个跨语言是建立在编写代码的基础上,iOS开发使用protobuf可以添加第三方库即可集成开发环境进行使用。
官方资料:
https://developers.google.com/protocol-buffers/docs/overview
二. 环境集成
protobuf buffers安装
下载环境地址:
https://github.com/google/protobuf/releases
选择好需要下载的安装包:(二选一)
下载完成之后,进行解压,然后使用终端,进入到其解压文件下:
依次在终端中执行:
- $ ./autogen.sh
- $ ./configure
- $ make
- $ make check
- $ sudo install
完成之后,打开终端。输入以下命令:
三. 创建.proto文件
我们这里写一个Person.proto文件
四. 利用protoc的插件生成对应的.h与.m文件
使用终端进入Person.proto文件路径下。
终端输入命令:
-
protoc --proto_path=. --objc_out=. Person.proto
完成之后生成.h 与.m文件
五. 将对应的.h与.m文件添加到工程中
新建一个工程,之后将Person.proto & Person.pbobjc.h & Person.pbobjc.m添加到工程中。(注:此工程需要使用Protobuf第三方框架,可以使用Cocoapods进行导入)
之后 Command+B 编译一下,会发现报错。
原因是生成的Person.pbobjc.m文件为MRC下使用,而我们的工程环境为ARC,所以需要配置该文件支持ARC环境。
完成之后,继续Command+B编译运行一下。
仍然发现会有错误
针对这三个错误,解决方式为:
直接注释掉这一行。
直接注释掉这一行
直接点击Enter键
最后Command+B 编译一下,可以看到,工程没有错误了。
六.对protobuf Buffer数据的序列化与反序列化
在ViewController.m中导入头文件
创建Person的实例化对象,并且给其属性赋值,序列化为data类型,可以用于网络传输,反序列化为Person的实例化对象,可以之前请求数据获取Data Model。
七.总结
protobuf数据格式的使用,提高了程序员开发效率,由于数据的轻量,所占到了更少的带宽,提高程序的效率。只需要前期与后台定义好.proto文件,得到的data的数据,可以直接反序列化为data model,一定程度的提高了开发效率。