在iOS开发中使用Protobuf

作者: SnoopPanda | 来源:发表于2017-12-17 16:38 被阅读15次
    Protobuf简介(来自百度百科)

    protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。


    在MacOS上安装适用于Objective-C的Protobuf编译器

    检查系统是否安装Homebrew
    brew -v
    如果没安装Homebrew
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    安装Protobuf编译器和依赖文件
    brew install automake
    brew install libtool
    brew install protobuf
    从github克隆protobuf-objc,执行build.sh文件
    git clone https://github.com/google/protobuf.git
    cd protobuf/objectivec/DevTools
    ./full_mac_build.sh
    编译.proto文件
    protoc --plugin=/usr/local/bin/protoc-gen-objc *.proto --objc_out="./"

    PS:之后会生成两个文件 xxx.pbobjc.hxxx.pbobjc.m 把这两个文件拖到项目中即可使用。需要注意的是这个类不支持arc,所以要在 Build Phase -> Compile Sources 中在xxx.pbobjc.m文件加上-fno-objc-arc


    将protobuf引入到项目中

    看具体项目需要了,你可以选择cocoapod引入,也可以打包静态库引入项目,当然直接把相关文件放进项目也是可以的,第一种最简单了。我看往上前两种都给出教程了,就尝试了第三种方案,步骤如下:

    1. 找到objectivec文件夹,将除了Tests文件夹之外的文件拉入工程
    2. 找到GPBProtocolBuffer.m文件将引入的所有.m文件注释掉

    如果不注释调,会报错duplicate symbol


    使用protobuf序列化和反序列化数据
    1. 定义模型的Person.proto文件

       message Person {
           required int32 id = 1;
           required string name = 2;
           optional string email = 3;
       }
      
    2. 编译proto文件,得到Person.pbobjc.hPerson.pbobjc.m文件,拉到项目里面。

    3. 注意得到的文件是不支持arc模式的。在Build PhasesCompile Sources中,找到Person.pbobjc.m文件,设置Compiler Flags-fno-objc-arc

    4. 创建模型并将模型序列化为二进制

    Person *person = [[Person alloc] init];
    person.id_p = 11;
    person.name = @"xiaoming";
    person.email = @"xiaoming@gmail.com";
    NSData *data = [person data]; // 序列化为二进制
    
    1. 将二进制反序列化为模型对象
    Person *parsePerson = [Person parseFromData:data error:nil];
    NSLog(@"id = %d , name = %@, email= %@", parsePerson.id_p, parsePerson.name, parsePerson.email);
    

    DEMO地址:ProtobufForObjectiveCDemo
    参考:
    https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/
    http://www.jianshu.com/p/751aa2b621d5
    http://www.jianshu.com/p/e06ba6249edc
    http://blog.devzeng.com/blog/ios-protobuf.html
    http://www.jianshu.com/p/25baebc411fe

    相关文章

      网友评论

        本文标题:在iOS开发中使用Protobuf

        本文链接:https://www.haomeiwen.com/subject/rxglwxtx.html