本文作者:丁同舟,来自金蝶随手记技术团队。
Protobuf 出于性能考虑没有使用 ARC,但在 ARC 下是可以使用的。
$ brew install autoconf $ brew install automake $ brew install libtool
$ ./autogen.sh $ ./configure $ make $ make install
$ protoc --version
libprotoc 3.5.1
syntax = "proto3"; message Person { string name = 1; int32 id = 2; string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { string number = 1; PhoneType type = 2; } repeated PhoneNumber phone = 4; }
protoc Person.proto --objc_out=./
$ cd protobuf-3.5.1/objectivec
$ mkdir ~/ProtobufDemo/ProtocolBuffers ~/ProtobufDemo/ProtocolBuffers/google ~/ProtobufDemo/ProtocolBuffers/google/protobuf $ cp *.h *.m ~/ProtobufDemo/ProtocolBuffers $ cp google/protobuf/*.pbobjc.h google/protobuf/*.pbobjc.m ~/ProtobufDemo/ProtocolBuffers/google/protobuf
上面的命令并没有排除 GPBProtocolBuffers.m 文件,引入时需要手动排除。
1.jpg (57.29 KB, 下载次数: 1013)
下载附件 保存到相册
6 年前 上传
2.jpg (71.6 KB, 下载次数: 989)
需要注意工程中的 Header Search Paths 要增加 $(PROJECT_DIR)/ProtocolBuffers(具体的路径视情况而定)
3.jpg (16.39 KB, 下载次数: 965)
4.jpg (16.33 KB, 下载次数: 982)
#import "Person.pbobjc.h"
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" }
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用此评论
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.137701 second(s), 46 queries , Gzip On.