Protocol buffers在iOS中的使用(Objective-C)

一. 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
    完成之后,打开终端。输入以下命令:
Protocol buffers在iOS中的使用(Objective-C)_第1张图片
查看protoc插件

三. 创建.proto文件

我们这里写一个Person.proto文件

Protocol buffers在iOS中的使用(Objective-C)_第2张图片
创建一个Person的Message
Protocol buffers在iOS中的使用(Objective-C)_第3张图片
生成Person.proto文件

四. 利用protoc的插件生成对应的.h与.m文件

使用终端进入Person.proto文件路径下。
终端输入命令:

  • protoc --proto_path=. --objc_out=. Person.proto
    完成之后生成.h 与.m文件


    Protocol buffers在iOS中的使用(Objective-C)_第4张图片
    生成.h & .m

五. 将对应的.h与.m文件添加到工程中

新建一个工程,之后将Person.proto & Person.pbobjc.h & Person.pbobjc.m添加到工程中。(注:此工程需要使用Protobuf第三方框架,可以使用Cocoapods进行导入)

Protocol buffers在iOS中的使用(Objective-C)_第5张图片
添加到工程中

之后 Command+B 编译一下,会发现报错。

Protocol buffers在iOS中的使用(Objective-C)_第6张图片
报错信息

原因是生成的Person.pbobjc.m文件为MRC下使用,而我们的工程环境为ARC,所以需要配置该文件支持ARC环境。

Protocol buffers在iOS中的使用(Objective-C)_第7张图片
支持ARC环境

完成之后,继续Command+B编译运行一下。
仍然发现会有错误

Protocol buffers在iOS中的使用(Objective-C)_第8张图片
错误信息

针对这三个错误,解决方式为:


错误1

直接注释掉这一行。

Protocol buffers在iOS中的使用(Objective-C)_第9张图片
错误2

直接注释掉这一行

Protocol buffers在iOS中的使用(Objective-C)_第10张图片
错误3

直接点击Enter键

最后Command+B 编译一下,可以看到,工程没有错误了。

六.对protobuf Buffer数据的序列化与反序列化

在ViewController.m中导入头文件

导入头文件

创建Person的实例化对象,并且给其属性赋值,序列化为data类型,可以用于网络传输,反序列化为Person的实例化对象,可以之前请求数据获取Data Model。

Protocol buffers在iOS中的使用(Objective-C)_第11张图片
序列化与反序列化
Protocol buffers在iOS中的使用(Objective-C)_第12张图片
控制台打印

七.总结

protobuf数据格式的使用,提高了程序员开发效率,由于数据的轻量,所占到了更少的带宽,提高程序的效率。只需要前期与后台定义好.proto文件,得到的data的数据,可以直接反序列化为data model,一定程度的提高了开发效率。

Demo地址

你可能感兴趣的:(Protocol buffers在iOS中的使用(Objective-C))