ShannonChenCHN / iOSDevLevelingUp

A journey of leveling up iOS development skills and knowledge.
365 stars 105 forks source link

Protocol Buffer ("protobuf") #111

Open ShannonChenCHN opened 6 years ago

ShannonChenCHN commented 6 years ago
ShannonChenCHN commented 6 years ago

Protocol Buffer

简介

相对于传统的 XML 和 JSON, Protocol buffers 的优势主要在于:更加小、更加快。对于自定义的数据结构,Protobuf 可以通过生成器生成不同语言的源代码文件,读写操作都非常方便。

在 iOS 中使用 PB

  1. 安装 Protocol Buffer,到 GiHub repo 上下载源码,按文档安装即可。

  2. 创建 .proto 文件,再用 Protobuf 编译器生成目标语言(这里是 Objective-C)所需要的源代码文件,也就是一个定义了 model 类的文件。

  3. 在项目中导入 PB 编解码相关的代码,有三种导入方式

原理

Protocol Buffer

Protocol Buffer 的主要优点在于小巧、快速:

这两个优点主要源于两点:

Protocol Buffer 的缺点:

Objective-C 中的 decode 逻辑

在 Protocol Buffer 的 Objective-C 解码库中,解析 PB 数据的逻辑可以简单理解为:

通过在 GPBMessage 子类中实现的 Descriptor(包括 GPBFileDescriptor、 GPBDescriptor 和 GPBFieldDescriptor),指定 Message 以及各属性的一些信息,然后再循环遍历这个 GPBMessage 子类的各个属性对应的 Descriptor,对属性进行赋值。

Protocol Buffer 源码

protobuf 是跨平台的,protobuf 大概分成两部分:

参考