ProtocolBuffers-3 For Objective C (1)-简单的使用
一. 介绍
Protocolbuffer 是一种数据交换格式,类似于我们现在使用的XML和JSON。是Google公司推出的,本来这个语言是Google公司内部使用的,随着Google对这个格式的优化,就本着好用的东西大家分享的原则,就拿出来供大家使用(简称Protobuf或PB),和XML、JSON一样它独立于语言,独立于平台的。Google 提供了多种语言的实现:Java、c++ 、 Python、OC等,每一种实现都包含了相应语言的编译器以及库文件。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。与传统的XML和JSON不同的是,它是一种二进制格式,免去了文本格式转换的各种困扰,并且转换效率非常快,由于它的跨平台、跨编程语言的特点,让它越来越普及,尤其是网络数据交换方面日趋成为一种主流。说白了就是这个数据格式转换快,占用空间小,更有利于提高程序的运行速度和执行效率。

二. 使用
这里我们只说OC的使用,PB目前托管在GitHub,链接地址:https://github.com/google/protobuf,源码的主要功能可以分为两部分:PB基础库:对象->二进制数据、二进制数据->对象 这两个转换过程的支持;PB编译器:源码生成器,将proto文件文件转成对应语言的源码。
1. 编译源码,生成PB编译器
编译源码主要的目的就是在本地生成PB的编译器,下载好protobuf-objectivec-3.0.0-alpha-4.tar.gz文件(这个是现在比较稳定的版本也有新的版本,可以自己去下载,流程是一样的),执行以下的命令进行编译:执行完成之后就可以使用protoc命令了,那就可以很方便生成不同语言的源码文件。

2. 给工程添加PB依赖库(我们使用Pod 当然你也可以下载下来托人项目中)
在podfile文件中加入pod "Protobuf", "~> 3.0.0-alpha-4",你使用哪个版本就写什么版本。写好之后podinstall就行了。
3. 使用PB编译器编译.proto文件
创建一个person.proto文件,在文件中写上下面的代码,在相同目录下中终端执行
protoc --objc_out=./ ./person.proto,这样就会在这个目录下生成Person.pbobjc.h和Person.pbobjc.m这两个文件了
message Person
{
required string name = 1;
required int32 sex = 2;
required int32 age = 3;
}
需要注意的是现在生的文件还不支持ARC,需要在工程里添加-fno-objc-arc的标签

4. 在项目中使用
// 创建对象
Person *person = [Person new];
person.name = @"MCJ";
person.sex = 1;
person.age = 30;
// 序列化为Data
NSData *data = [person data];
// 反序列化为对象
Person *person2 = [Person parseFromData:data error:NULL];
NSLog(@"name:%@ sex:%d age:%d",person2.name,person2.sex,person2.age);
ProtocolBuffers-3 For Objective C (1)-简单的使用的更多相关文章
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- IOS学习笔记3—Objective C—简单的内存管理
今天简述一下简单的内存管理,在IOS5.0以后Apple增加了ARC机制(Automatic Reference Counting),给开发人员带来了不少的方便,但是为了能更好的理解IOS内存管理机制 ...
- Objective C运行时(runtime)
#import <objc/runtime.h> void setBeingRemoved(id __self, SEL _cmd) { NSLog(@"------------ ...
- iOS开发 - OC - 苹果为大家提供的后台:CloudKit 的简单使用
一.什么是cloudKit 移动开发中,网络请求数据是日常中用到的,我们习惯把一些用户改动的数据存在服务器,以便下次请求使用.或者开发者方通过服务器将编辑的数据发送给用户.但是这一切都建立在我们的AP ...
- Objective C ARC 使用及原理
手把手教你ARC ,里面介绍了ARC的一些特性, 还有将非ARC工程转换成ARC工程的方法 ARC 苹果官方文档 下面用我自己的话介绍一下ARC,并将看文档过程中的疑问和答案写下来.下面有些是翻译,但 ...
- Deep learning:四十八(Contractive AutoEncoder简单理解)
Contractive autoencoder是autoencoder的一个变种,其实就是在autoencoder上加入了一个规则项,它简称CAE(对应中文翻译为?).通常情况下,对权值进行惩罚后的a ...
- 机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)
为了对GMM-HMM在语音识别上的应用有个宏观认识,花了些时间读了下HTK(用htk完成简单的孤立词识别)的部分源码,对该算法总算有了点大概认识,达到了预期我想要的.不得不说,网络上关于语音识别的通俗 ...
- 刨根问底Objective-C Runtime
http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...
- Objective C运行时(runtime)技术的几个要点总结
前言: Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...
随机推荐
- ERwin® Data Modeler介绍
Erwin是一个非常优秀数据建模工具,详细信息请参考百科与官网,在国内关于Erwin的资料不多,最有价值的还属于2004年出版的<erwin数据建模>:其他诸如各种文库的ppt与word文 ...
- 5 Django系列之通过list_display展示多对多与外键内容在admin-web界面下
list_display展示多对多关系的内容 表结构关系 表一 class Server(models.Model): asset = models.OneToOneField('Asset') cr ...
- Linux下Nginx负载 iis问题
使用以下NGINX配置负载IIS upstream 192.168.119.128{ server 192.168.119.1:8081; server 192.168.119.1:8082; } s ...
- thinkphp使用ajax
thinkphp使用ajax和之前使用ajax的方法一样,不同点在于之前的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法. 一.thinkphp使用ajax返回数 ...
- git操作---更新删除
1.更新git git pull <远程主机名> <远程分支名> 例如:git pull origin master 2.更新子模块 git submodule updat ...
- redis技巧--IP地址查询对应城市
场景: 根据IP地址判断用户所在地,虽然网上有好多篇了,但我记录一个一看就懂的,不用看超长文字再自己理解了. 我们有城市和IP地址段的对应关系,如: 上海: 202.127.0.0 ~ 202.127 ...
- hibernate+mysql的连接池配置
1:连接池的必知概念 首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...
- 常用function() 收集
1.随机数生成函数(来源-微信支付demo案例) /** * * 产生随机字符串,不长于32位 * @param int $length * @return 产生的随机字符串 */ public st ...
- phpstorm 使用技巧
专题1 专题2 专题3 专题4 快捷键
- java时间类型操作
java中Date类型与字符串相互转化 Date date = new Date(); System.out.println(date); //DateFormat类为一个 ...