1.引入官方基础pod

谷歌将protobuf需要使用的基础类封装成了一个pod,因此可以直接安装该pod,不必再手工导入. 
如下: 
pod "Protobuf", :git => "https://github.com/google/protobuf.git" 
之所以设置git路径,是因为这样pod ‘Protobuf’, ‘~> 3.1.0’一直没有下载下来,所以直接使用了官网路径.

2.下载生成代码工具

a.安装protoc: brew install –devel protobuf 如果出现了下面的版本号,说明安装成功 ➜ ~ protoc --version libprotoc 3.0.0 关于protoc工具的使用请参考 https://developers.google.com/protocol-buffers/docs/proto3

b.另外一个方法是直接从github下载,自己编译一个protoc 链接:https://github.com/google/protobuf/tree/master/objectivec.编译完成后, 
在protobuf/src下可以找到该工具

3.定义数据模型

syntax = "proto3";
package tutorial;
message SearchResponse {
repeated Result results = ;
} message Result {
string url = ;
string title = ;
repeated string snippets = ;
}

将以上数据保存到Test.proto的文件中.

生成代码的命令为: 
protoc –objc_out=tmp Test.proto 
最后一个参数是定义的数据模型,生成的代码会写入objc_out对应的文件夹内.注意是两个短横杠

4.简单使用

    1. 直接将生成的代码拖入1创建的项目中,
    2. import相关头文件
    3. protobuf为了性能考虑,创建的都是mrc文件,因此在build phrases ->Compile 
      sources中给拖入的文件添加 -fno-objc-arc的标志
Result *res = [[Result alloc] init];
res.title = @"";
NSLog(@"%@",res.description); //序列化
NSData *data = [res data]; //反序列化
NSError *error;
Result *res1 = [[Result alloc] initWithData:data error:&error];
NSLog(@"%@",res1.description);

post请求:

- (void)protoPost {
// 设置请求体
BidRequest * bidRequest = [[BidRequest alloc] init];
bidRequest.bid = @"bid";
bidRequest.version = @"version"; BidRequest_BidUserInfo * bidUserInfo = [[BidRequest_BidUserInfo alloc] init];
bidUserInfo.ip = @"ip";
bidRequest.bidUserInfo = bidUserInfo; BidRequest_BidAppInfo * bidAppInfo = [[BidRequest_BidAppInfo alloc] init];
bidAppInfo.appId = @"appId";
bidAppInfo.appName = @"appName";
bidRequest.bidAppInfo = bidAppInfo; BidRequest_BidAdSlotInfo * bidAdSlotInfo = [[BidRequest_BidAdSlotInfo alloc] init];
bidAdSlotInfo.slotId = @"slotId";
bidAdSlotInfo.width = ;
bidAdSlotInfo.height = ;
bidRequest.bidAdSlotInfo = bidAdSlotInfo; self.myData = [bidRequest data]; NSURL * url = [NSURL URLWithString:@"http://192.168.10.45:9988/unioncast-ssp-manager/bidding/ssp/process"];
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
request.timeoutInterval = ;
request.HTTPMethod = @"POST";
request.HTTPBody = self.myData;
[request setValue:@"application/protobuf" forHTTPHeaderField:@"Content-Type"];
NSURLSession * session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionDataTask * task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"error = %@",error);
return;
} else {
NSLog(@"------ data = %@",data);
NSLog(@"success");
// 返回的数据
BidRequest * bidRequest = [BidRequest parseFromData:data error:nil];
NSLog(@"=====%@",bidRequest.description);
NSString * result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",result);
}
}];
[task resume];
}

protobuf3 iOS 接入 protobuf的更多相关文章

  1. iOS 集成Protobuf,转换proto文件

    原文地址:http://blog.csdn.net/hyq4412/article/details/54891038 附加Homebrew安装地址:https://brew.sh/index_zh-c ...

  2. 近期unity ios接入的事情

    1,  在接入苹果内支付的时候,遇到一个很严重的问题,使用的公司的moni2来测试的,但是在测试的过程中发现每次调用oc的内支付代码后,总会先回调一个支付成功,然后弹出输入密码框,当点击取消后,再一次 ...

  3. 91平台iOS接入demo

    源码:http://pan.baidu.com/s/1DuBl6 今天整理硬盘,找到了一个有趣的demo.一年前,91助手游戏联运呈爆棚趋势,但是许多使用FlashAir开发的优秀的游戏和应用都卡在了 ...

  4. iOS接入微信登录可能遇到的问题

    前言:记录一下接入微信登录的过程中可能遇到的问题 如果是出现明明已经安装了微信但是显示出来的是没有安装微信,可能出现的问题的地方有: 1.TARGETS->Info->URL Types处 ...

  5. iOS使用protobuf环境的配置

    配置protobuf需要HomeBrew工具或则是MacPort.如没有安装,则需要配置HomeBrew工具或则是MacPort. 步骤1(环境配置前的准备工作): 1:使用HomeBrew brew ...

  6. AIR Native Extension for iOS 接入第三方sdk 如何实现 AppDelegate 生命周期

    作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/6492385.html 原创文章,转载请注明作者和出处,未经允许不可用于商业营利活动 去年到今年做 ...

  7. ios 接入微信开发 新版

    首先在服务器所在域名(https://www.test.com)根目录创建apple-app-site-association文件 { "applinks": { "ap ...

  8. cocos2dx for iOS fmod的音效引擎接入

    上一个博客我写了一篇fmod的android接入过程,这一次介绍一下ios接入fmod的方法. 首先下载fmod的api包,解压后,在FMOD Programmers API/api文件夹下有lowl ...

  9. cocos2d-x 2.x版本接入bugly的总结

    最开始项目使用的是自己DIY的很简陋的上报系统,后来改成google breakpad来上报,发现其实都做的不太理想,游戏引擎因为版本历史问题存在一些崩溃问题.后来3.x接入了bugly,我这边抽了几 ...

随机推荐

  1. Android -- startActivityForResult和setResult

    startActivityForResult与startActivity的不同之处 startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivit ...

  2. Android -- 系统和自定义Notification

    Notification是一种让你的应用程序在不使用Activity的情况下警示用户,Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径. 作为UI部分,Notifica ...

  3. win7基于mahout推荐之用户相似度计算

    http://www.douban.com/note/319219518/?type=like win7基于mahout推荐之用户相似度计算 2013-12-03 09:19:11    事情回到半年 ...

  4. MarkDownPad Pro 支持github格式的markdown语法

    1. http://blog.csdn.net/xiaohei5188/article/details/43964451

  5. Syntax error missing ; before *

      [问题] I have a header file like so: #pragma once #include "gamestate.h" #include "Ex ...

  6. (C++)关于拷贝构造函数 Copy Constructor

    题目: In which of the following scenarios is a Copy Constructor called or invoked? A.    When no conve ...

  7. 极域电子教室卸载或安装软件后windows7无法启用触摸板、键盘

    我今天在win7上装了个极域电子教室,卸载后重启触摸板,键盘都不能用了?连口令都是用屏幕键盘来输入的.进去后看设备管理器,键盘和触摸板,前面都有黄色的告警,而且就是出现了鼠标代码为10的情况?不过吧鼠 ...

  8. Disqus评论框改造工程-Jekyll等静态博客实现Disqus代理访问

    文章最初发表于szhshp的第三边境研究所转载请注明 关于博客评论 六月多说挂了,地球人都知道. 倡言.云跟帖.来必力都很烂,地球人都知道. 转Disqus的都是人才. Disqus使用中遇到的问题 ...

  9. CentOS7安装 Apache HTTP 服务器

    CentOS7安装 Apache HTTP 服务器 时间:2015-05-02 00:45来源:linux.cn 作者:linux.cn 举报 点击:11457次 不管你因为什么原因使用服务器,大部分 ...

  10. 【linux】Ubuntu中shell脚本无法使用source的原因及解决方法

    问题现象: shell脚本中source aaa.sh时提示 source: not found 原因: ls -l `which sh` 提示/bin/sh -> dash 这说明是用dash ...