Protocol Buffers
Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. You can even update your data structure without breaking deployed programs that are compiled against the "old" format.
以上是谷歌对 Protocol Buffers
的介绍。
Protocol Buffers
是一种用于序列化结构化数据的灵活,高效,自动化的机制–以XML为例,但更小,更快,更简单。 一次性定义要构造数据的方式,然后可以使用生成的特殊源代码,轻松地使用各种语言在各种数据流中写入和读取结构化数据。 甚至可以更新数据结构,而不会破坏旧的数据结构。
环境安装
下载环境地址:
https://github.com/google/protobuf/releases
选择安装包
protobuf-objectivec-3.11.2.tar.gz
或者
protobuf-objectivec-3.11.2.tar.gz
下载完成后,解压压缩包
然后紧接着终端进入加压后的文件夹路径
依次在终端中执行
./autogen.sh
./configure
make
make check
make install
执行完成后,输入 protoc --version
查看是否安装成功
或者也可以,终端进入 /usr/local/bin/
cd /usr/local/bin/
ls -l
查看是否有包含 protoc
, 如果有则代表安装成功。
使用 Protocol Buffers
创建 Person.proto 文件
并且在文件中,添加一下内容
syntax = "proto3";
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message Person {
string name = 1;
int32 age = 2;
string gender = 3;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
终端进入 Person.proto
文件所在的路径
输入指令
protoc --proto_path=. --objc_out=. Person.proto
--proto_path : proto 路径,当前路径使用
.
表示
--objc_out : 生成.h
.m
文件存放路径
Person.proto : proto 文件名
生成了 .h
.m
文件后将 .h
、.m
、.proto
文件拖入工程中,由于 .m
是 MRC
环境的,现在的工程普遍都是 ARC
环境,所以不能直接编译成功,需要将 .m
文件的 Compiler Flags
改成 -fno-objc-arc
, 具体路径是 targets
→ build phases
→ Compile Sources
.
然后编译。
创建 Person 类
首先,在ViewController
中导入Person.pbobjc.h
文件,在 viewDidLoad
中创建类
Person *person = [Person new];
person.name = @"Jack";
person.age = 23;
person.gender = @"Male";
PhoneNumber *number = [PhoneNumber new];
number.number = @"1234";
number.type = PhoneType_Mobile;
NSData *personData = [person data];
NSError *error = nil;
Person *personGet = [Person parseFromData:personData error:&error];
if (error) {
NSLog(@"%@", error.description);
}
NSLog(@"%@", personGet);
NSLog(@"%@", [PhoneNumber parseFromData:[number data] error:nil]);
输出结果
2019-12-17 15:47:44.527499+0800 ProtocolBuffer[78646:546550] <Person 0x600002b95440>: {
name: "Jack"
age: 23
gender: "Male"
}
2019-12-17 15:47:44.527789+0800 ProtocolBuffer[78646:546550] <PhoneNumber 0x600002b9ff00>: {
number: "1234"
}
网友评论