iOS Protocol Buffers安装与使用

前言

最近用ProtocolBuf协议进行网络传输,数据也是转为ProtocolBuf。记录下使用流程

Protocol Buffers介绍

protocol buffer全称Google Protocol Buffer,是Google 公司内部的混合语言数据标准。他们用于RPC 系统和持续数据存储系统。

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化,它很适合做数据存储或RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前官方提供了C++、C#、DART、GO、Java、Python 六种语言的API,也可以支持其他语言,实现它的派生方法即可。
官方地址:https://developers.google.cn/protocol-buffers/

环境安装

brew install automake
brew install libtool
brew install protobuf

上面安装好protobuf完成

proto源文件转OC

1、 终端 cd 到一个新文件架下:

touch geexLogData.proto

2、打开 编辑内容

syntax = "proto3";

message geexLogData {
    bytes body = 1;
    string flagStr = 2;
}

3、生成对应的.h 与.m文件

protoc ./geexLogData.proto --objc_out=./
iOS Protocol Buffers安装与使用_第1张图片
生成对应的文件

使用

1、工程导入Protobuf

 pod  'Protobuf'

2、创建的.h 与.m文件拖入工程;网上都让加-fno-objc-arc,我没有加也是正常

3、当正常的model 使用

    Person *person = [Person new];
    person.personId = 1;
    person.personName = @"Carson";
    person.personGender = @"Male";
    person.personMessage = @"I'm the best in the world !";
    
    NSData *personData = [person data];

4、网络传输

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    
    NSURL *url = [NSURL URLWithString: urlStr];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20];
    [request setValue:@"application/x-protobuf" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"application/x-protobuf" forHTTPHeaderField:@"Accept"];
    request.HTTPMethod = @"POST";
    
    geexLogBody *body = [[geexLogBody alloc] init];
    body.body = parameters;
    
    request.HTTPBody = [[body data] base64EncodedDataWithOptions:0];
    
    AFHTTPResponseSerializer *responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.responseSerializer = responseSerializer;
    
    [[manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
    }] resume];

正常model赋值,讲对象序列化data 然后上传。

估计我处理的问题,我也没发现比json数据少,没感到有什么好处。 可能后台能直接反序列化为model

你可能感兴趣的:(iOS Protocol Buffers安装与使用)