最新要闻
- 7万起售 五菱缤果内饰官图发布:同级无敌手
- 世界上最轻VR头显面世:仅重127克 5K分辨率
- 环球新消息丨苹果汽车奇瑞造?“果链一哥”立讯与奇瑞签署合作 联手造车
- 当前动态:法拉第未来:预计FF 91将于4月底交付 但有个前提
- 不用第三方插件了:微软计划为Edge加入鼠标手势功能
- qq空间主人寄语怎么删除?qq空间主人寄语大集合
- 开学的歌曲有哪些?开学的趣事作文模板
- 熟悉的人是什么意思?关于我最熟悉的人作文合集
- 皮脂腺分泌旺盛是什么原因?皮脂腺分泌旺盛怎么解决?
- 代表月亮消灭你是什么意思?代表月亮消灭你是谁的经典台词?
- 速看:口味地道 丰富配料!渣渣灰南昌拌粉好价:4.9元/盒
- 全球新资讯:129元!小米2C1A三口GaN充电器上架:最高67W 兼容65W PD
- 天天信息:3秒俱乐部成员!极氪X官图公布:2750mm轴距百变魔方空间
- 63岁老人喝隔夜牛肉汤:结果住进ICU
- 黑龙江上空现不明飞行物速度极快 网友脑洞大开:LED风筝?
- 瞧不起ChatGPT?苹果联合创始人:永远取代不了人类
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天快播:IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
本文作者:丁同舟,来自金蝶随手记技术团队。
1、引言
接上篇《金蝶随手记团队的Protobuf应用实践(原理篇)》,本文将以iOS端的Objective-C代码为例,图文并茂地向您菔救绾卧趇OS工程中快速使用Protobuf,希望对你有帮助。
学习交流:
(相关资料图)
- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM》
- 开源IM框架源码:https://github.com/JackJiang2011/MobileIMSDK(备用地址点此)
(本文已同步发布于:http://www.52im.net/thread-4133-1-1.html)
2、系列文章
本文是系列文章中的第9篇,本系列总目录如下:
- 《IM通讯协议专题学习(一):Protobuf从入门到精通,一篇就够!》
- 《IM通讯协议专题学习(二):快速理解Protobuf的背景、原理、使用、优缺点》
- 《IM通讯协议专题学习(三):由浅入深,从根上理解Protobuf的编解码原理》
- 《IM通讯协议专题学习(四):从Base64到Protobuf,详解Protobuf的数据编码原理》
- 《IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!》
- 《IM通讯协议专题学习(六):手把手教你如何在Android上从零使用Protobuf》(稍后发布..)
- 《IM通讯协议专题学习(七):手把手教你如何在NodeJS中从零使用Protobuf》
- 《IM通讯协议专题学习(八):金蝶随手记团队的Protobuf应用实践(原理篇)》
- 《IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf》(* 本文)
另外:如果您还打算系统地学习IM开发,建议阅读《新手入门一篇就够:从零开发移动端IM》。
3、基本介绍
Protobuf(全称 Protocol buffers) 是 Google 提出的一种跨平台、多语言支持且开源的序列化数据格式。相对于类似的 XML 和 JSON,Protobuf 更为小巧、快速和简单。相对于传统的 XML 和 JSON, Protobuf 的优势主要在于:更加小、更加快,其语法目前分为proto2和proto3两种格式。
如果你没不了解Protobuf是什么,建议先阅读本系列的前几篇《Protobuf从入门到精通,一篇就够!》、《快速理解Protobuf的背景、原理、使用、优缺点》、《金蝶随手记团队的Protobuf应用实践(原理篇)》,本篇就不再重复介绍了。
目前 Google 官方的Protobuf最新 release 版本为3.21.12,但本文写作时用的是3.5.1,以下截图都是基于此版本的环境搭建,如果你使用最新版本,差异并不大,因为只是小版本更新。
关于 Protobuf的使用可以查阅官方文档:https://developers.google.com/protocol-buffers/docs/overview,建议养成阅读文档的习惯。
4、准备工作
4.1环境要求
最低开发环境要求:
- 1)Objective-C 2.0 Runtime (32bit & 64bit iOS, 64bit OS X)
- 2)Xcode 7.0 以上版本
注意:Protobuf 出于性能考虑没有使用 ARC,但在 ARC 下是可以使用的。
4.2下载安装
下载 Protobuf 代码包(https://github.com/protocolbuffers/protobuf/releases/tag/v21.12),因文章截图时用的是v3.5.1,所以我这里的为了保持一致选择的是protobuf-objectivec-3.5.1.tar.gz,版本区别不大,建议依此类推。
4.3解压代码包
编译 Protobuf,这里可能需要安装部分工具:
$ brew install autoconf
$ brew install automake
$ brew install libtool
运行下面脚本进行编译:
$ ./autogen.sh
$ ./configure
$ make
$ makeinstall
检查protobuf是否安装成功:
$ protoc --version
如果成功打印版本号则安装成功:
libprotoc 3.5.1
5、在 iOS 中使用 Protobuf
5.1创建.proto文件
这里使用官方文档上的一份示例数据结构创建Person.proto:
syntax = "proto3";
message Person {
string name = 1;
int32 id = 2;
string email = 3;
enumPhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
repeated PhoneNumber phone = 4;
}
使用命令行编译Person.proto为objective-c的文件,编译出来的文件为Person.pbobjc.h和Person.pbobjc.m:
protoc Person.proto --objc_out=./
5.2引入 Protobuf 运行时资源
Google 官方的文档提供了两种引入方式,但使用第一种的时候编译不能通过,所以这里选择了第二种。
具体就是:复制protobuf目录下的:objectivec/*.h, objectivec/google/protobuf/*.pbobjc.h, objectivec/google/protobuf/*.pbobjc.m, 以及除去objectivec/GPBProtocolBuffers.m后的objectivec/*.m。
这里直接用命令行操作。
首先进入protobuf下objectivec的目录:
$ cdprotobuf-3.5.1/objectivec
然后复制符合规则的文件到指定的工程目录下:
$mkdir~/ProtobufDemo/ProtocolBuffers~/ProtobufDemo/ProtocolBuffers/google~/ProtobufDemo/ProtocolBuffers/google/protobuf
$ cp*.h *.m ~/ProtobufDemo/ProtocolBuffers
$ cpgoogle/protobuf/*.pbobjc.h google/protobuf/*.pbobjc.m ~/ProtobufDemo/ProtocolBuffers/google/protobuf
注意:上面的命令并没有排除 GPBProtocolBuffers.m 文件,引入时需要手动排除。
现在把ProtocolBuffers目录下所有文件以及上面编译出来的Person.pbobjc.h和Person.pbobjc.m都引入到工程中。
现在工程目录结构大概是长这样:
注意:由于protobuf没有使用 ARC,因此需要为所有.m文件加上-fno-objc-arc来关闭 ARC。
结果如下:
提示:需要留意工程中的 Header Search Paths 要增加$(PROJECT_DIR)/ProtocolBuffers(具体的路径视情况而定)。
5.3直接引入 ProtocolBuffers 工程
如果觉得手动引入文件的方式过于复杂,可以直接引入ProtocolBuffers工程作为依赖项。
1)进入解压后的protobuf目录下,复制objective目录下的所有文件到ProtobufDemo/ProtocolBuffers目录下。
2)在ProtobufDemo工程中引入ProtocolBuffers_iOS工程:
3)在Build Phases中加入依赖关系并链接库:
4)引入Person.pbobjc.h和Person.pbobjc.m文件并为.m加上-fno-objc-arc。
5)修改工程配置中部分路径为$(PROJECT_DIR)/ProtocolBuffers。
5.4运行测试
首先引入头文件:
#import "Person.pbobjc.h"
生成Person对象并进行编码和解码:
Person *p = [[Person alloc] init];
p.id_p = 1;
p.name = @"person1";
p.email = @"123@qq.com";
//encode
NSData*data = [p data];
NSLog(@"Protocol Buffers:\n%@\nData: %@\nData Length: %lu", p, data, data.length);
//decode
Person *newP = [[Person alloc] initWithData:data error:nil];
NSLog(@"Decoded: %@", newP);
运行程序,打印日志如下:
Protocol Buffers:
<;Person 0x60c0000da2b0>: {
name: "person1"
id: 1
email: "123@qq.com"
}
Data: <0a077065 72736f6e 3110011a 0a313233 4071712e 636f6d>
Data Length: 23
Decoded: <;Person 0x6040000d9c90>: {
name: "person1"
id: 1
email: "123@qq.com"
}
6、参考资料
[1]Protobuf 官方开发者指南(中文译版)
[2]Protobuf官方手册
[3]Protobuf从入门到精通,一篇就够!
[4]如何选择即时通讯应用的数据传输格式
[5]强列建议将Protobuf作为你的即时通讯应用数据传输格式
[6]APP与后台通信数据格式的演进:从文本协议到二进制协议
[7]面试必考,史上最通俗大小端字节序详解
[8]移动端IM开发需要面对的技术问题(含通信协议选择)
[9]简述移动端IM开发的那些坑:架构设计、通信协议和客户端
[10]理论联系实际:一套典型的IM通信协议设计详解
[11]58到家实时消息系统的协议设计等技术实践分享
[12]金蝶随手记团队的Protobuf应用实践(原理篇)
[13]新手入门一篇就够:从零开发移动端IM
Coffee time!
(本文已同步发布于:http://www.52im.net/thread-4133-1-1.html)
-
天天快播:IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
接上篇《金蝶随手记团队的Protobuf应用实践(原理篇)》,本文将以iOS端的Objective-C代码为例,图文并茂...
来源: 天天快播:IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
ChatGPT注册试用过程分享
全球观察:响应式圣经:10W字,实现Spring响应式编程自由
全球短讯!Unicorn 初探
7万起售 五菱缤果内饰官图发布:同级无敌手
世界上最轻VR头显面世:仅重127克 5K分辨率
环球新消息丨苹果汽车奇瑞造?“果链一哥”立讯与奇瑞签署合作 联手造车
当前动态:法拉第未来:预计FF 91将于4月底交付 但有个前提
不用第三方插件了:微软计划为Edge加入鼠标手势功能
qq空间主人寄语怎么删除?qq空间主人寄语大集合
开学的歌曲有哪些?开学的趣事作文模板
熟悉的人是什么意思?关于我最熟悉的人作文合集
皮脂腺分泌旺盛是什么原因?皮脂腺分泌旺盛怎么解决?
代表月亮消灭你是什么意思?代表月亮消灭你是谁的经典台词?
天天亮点!【AI】PTP时钟同步在智能驾驶系统里的重要性
天天微资讯!去掉Element 中el-input type=number时尾部上下箭头、禁用鼠标滚动
世界热点评!数组中找出只出现一次的两个数字
剑灵活力值在哪里显示?剑灵活力值怎么恢复?
ie图标不见了是怎么回事?ie图标不见了怎么恢复?
闪存和硬盘哪个重要?闪存和硬盘有什么区别?
料理机是干什么用的?料理机品牌十大排名
光纤路由器怎么设置?光纤路由器和宽带路由器一样吗?
速看:口味地道 丰富配料!渣渣灰南昌拌粉好价:4.9元/盒
全球新资讯:129元!小米2C1A三口GaN充电器上架:最高67W 兼容65W PD
天天信息:3秒俱乐部成员!极氪X官图公布:2750mm轴距百变魔方空间
63岁老人喝隔夜牛肉汤:结果住进ICU
黑龙江上空现不明飞行物速度极快 网友脑洞大开:LED风筝?
今日报丨程序员健康最佳作息表,建议收藏!!
必知必会的设计原则——合成复用原则
腾讯云企业网盘正式入驻数字工具箱
每日关注!软件开发入门教程网之Bootstrap4 信息提示框
【天天报资讯】适用于您企业的本地密码管理器丨Passwork产品介绍
瞧不起ChatGPT?苹果联合创始人:永远取代不了人类
【天天播资讯】热狗车三元催化被盗
宁德时代赴美建厂 官方回应:属实!福特出地出厂房
天天微头条丨丰田考斯特绝佳替代品 红旗全新中巴亮相:3.0T能坐23人
世界视讯!情人节前夕 东极岛海誓山盟石碑碎了 网友:承受太多誓言
百事通!RTX 4060桌面显卡被砍得面目全非:说好的万人迷呢?
匠人精神也不行!日本制造加速下滑:破产企业数量激增 汽车、电子业空心化
当前动态:情人节的垃圾桶成了“致富秘笈”?能捡到鲜花蛋糕等:网友戏称拆“爱情盲盒”
拒绝刹车失灵等污名化!美国还特斯拉清白:2年前车祸是司机醉酒超速
今日热议:微信情人节限定状态上线!撒狗粮/吃狗粮专属状态你选谁?
ChatGPT:Are You Ok是卢伟冰唱的 雷军不是专业歌手
世界新消息丨读Java实战(第二版)笔记09_函数式的思考
【当前独家】今天情人节 微信可以发520元红包 律师提醒:分手可能要不回
当前聚焦:曝马斯克有意45亿镑收购曼联:去年曾现身世界杯看球
世界视点!最高补贴5000元!为什么中国规定男性一生只能捐精一次?
头条:微软Win10今日停止支持IE11:强制跳转Edge 网友担心银行拖后腿
报道:2022年游戏十强年度榜公布:《王者荣耀》《原神》等上榜
每日视点!草莓的“种子”为什么裸露在外呢?大有讲究
13代i9+RTX 4070加持!ROG幻16经典版 2023图赏
当前热门:1.html篇之《html基础入门》
天天微资讯!leetcode:求两数之和-easy
世界讯息:maven 工程pom依赖优化及常用命令
全球百事通!世界超6成新能源汽车来自中国 比亚迪2022年累计出口55916辆
视讯!29.9元充值100元话费?套路满满 18家经营者被约谈
腾讯:我们发现了ChatGPT的又一个短板
【天天新要闻】判断二叉树是否为平衡二叉树
全球播报:《分布式技术原理与算法解析》学习笔记Day10
环球今日报丨微信多开&防撤回工具再也不用担心好友撤回消息了
天天讯息:打开MASA Blazor的正确姿势4.2:Flex弹性布局
14nm+++再也不见 Intel告别最长寿的CPU工艺:9年不落伍
【全球快播报】利用反射和代理简单模拟mybatis实现简单的CRUD
世界微动态丨Docker参数命令大全详解
男子驾车路遇“雪狼” 回头瞬间笑喷:原是只哈士奇
【热闻】刘作虎宣布闭关打磨细节:OPPO Find X6就快来了
当前速读:苹果联合创始人称ChatGPT不懂人性:可能会犯下可怕错误
《流浪地球2》里的“天梯”真的能建成吗?
每日短讯:开学小测总结(下)
【报资讯】【DFS】飞行员兄弟
今日热闻!03.Python Dash网页开发:多页面网站制作
【环球报资讯】二叉树的深度之DFS、BFS
当前头条:猛男最爱!Xbox手柄新配色“浪漫粉”今晚发售 网友惊了
当前快播:唯一16GB显存!宏碁Intel Arc A770旗舰显卡降价:2380元最便宜
直降700元 小牛G2/G2s部分车型促销:理论续航60-90公里
环球速讯:曾靠6字赚苹果上千万的汉王 怎么就搭上ChatGPT的风口
环球看热讯:你喝奶 选哪个品牌放心?蒙牛回应男子买酸奶打开全是清水
RTX 30别买了 高性价比RTX 40游戏本杀到:价格屠夫还是这两家
全球观速讯丨40S精梳棉 裸感体验:老牌宜而爽平角裤39元4条发车
环球讯息:短信不死
全球关注:检测到外星生命“存在证据”!“三体人”要来了吗?
天天报道:吉利赚了10个沃尔沃
记录--数组去重的五种方法
每日看点!D. Moscow Gorillas
环球热消息:Microsoft Azure 教程_编程入门自学教程_菜鸟教程-免费教程分享
环球百事通!文盘Rust -- 领域交互模式如何实现
打开MASA Blazor的正确姿势1:目录&MASA Blazor是???
全球最新:多家游戏公司招聘客服实为找托:引导玩家氪金
即时看!长城大力布局新能源 哈弗如歌、枭龙曝光:外观个性均可上绿牌
明天是情人节!全国多地现巨型玫瑰
世界看热讯:谁说鱼只有7秒记忆?研究首次证明鱼能认出自己的脸
今日热闻!马斯克“黑子”自费400万元 把特斯拉FSD负面广告送上美国超级碗
【Oculus Interaction SDK】(八)特殊的 UI(曲面效果 & 手指点击)
环球最新:并行执行异步方法的最佳实践
全球快播:react 中componentDidMount 只加载一次的解决办法
微头条丨ChatGPT爆火,释放了什么不寻常信号?
每日快看:Git下载、安装与配置
旅日大熊猫香香将要回国了:被赞“呆萌可爱迷倒游客”
【世界播资讯】年销35万台无悬念!李想:L8/L7 Air版交付后月销3万保底
牛皮吹大 全球首款量产太阳能电动车:黄了