一. 介绍

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)-简单的使用的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. IOS学习笔记3—Objective C—简单的内存管理

    今天简述一下简单的内存管理,在IOS5.0以后Apple增加了ARC机制(Automatic Reference Counting),给开发人员带来了不少的方便,但是为了能更好的理解IOS内存管理机制 ...

  3. Objective C运行时(runtime)

    #import <objc/runtime.h> void setBeingRemoved(id __self, SEL _cmd) { NSLog(@"------------ ...

  4. iOS开发 - OC - 苹果为大家提供的后台:CloudKit 的简单使用

    一.什么是cloudKit 移动开发中,网络请求数据是日常中用到的,我们习惯把一些用户改动的数据存在服务器,以便下次请求使用.或者开发者方通过服务器将编辑的数据发送给用户.但是这一切都建立在我们的AP ...

  5. Objective C ARC 使用及原理

    手把手教你ARC ,里面介绍了ARC的一些特性, 还有将非ARC工程转换成ARC工程的方法 ARC 苹果官方文档 下面用我自己的话介绍一下ARC,并将看文档过程中的疑问和答案写下来.下面有些是翻译,但 ...

  6. Deep learning:四十八(Contractive AutoEncoder简单理解)

    Contractive autoencoder是autoencoder的一个变种,其实就是在autoencoder上加入了一个规则项,它简称CAE(对应中文翻译为?).通常情况下,对权值进行惩罚后的a ...

  7. 机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)

    为了对GMM-HMM在语音识别上的应用有个宏观认识,花了些时间读了下HTK(用htk完成简单的孤立词识别)的部分源码,对该算法总算有了点大概认识,达到了预期我想要的.不得不说,网络上关于语音识别的通俗 ...

  8. 刨根问底Objective-C Runtime

    http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...

  9. Objective C运行时(runtime)技术的几个要点总结

    前言:          Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...

随机推荐

  1. 一个解析json串并组装echarts的option的函数解析

    缘起: 在组装echart页面的时候,遇到这样一个问题,它是一个需要在循环内层的时候,同时循环外层,在内层循环中就要将外层获取的值存入,导致了一种纠缠状态,费了老劲儿,终于得到如下解决.记录之,绿色为 ...

  2. Banner中利用Jquery隐藏显示下方DIV块

    实现方式1: <!DOCTYPE html><html><head>    <meta charset="UTF-8">    &l ...

  3. Javascript JQuery获取当前元素的兄弟元素/上一个/下一个元素(转)

    var chils= s.childNodes; //得到s的全部子节点 var par=s.parentNode; //得到s的父节点 var ns=s.nextSbiling; //获得s的下一个 ...

  4. sublime

    sublime的格式化快捷键 其实在sublime中已经自建了格式化按钮:Edit  ->  Line  ->  Reindent 只是sublime并没有给他赋予快捷键,所以只需加上快捷 ...

  5. css3 背景渐变

    本来想先瞎扯些什么,然后又不知道讲什么的好,那就直接进入正题吧. 参考资料: Using CSS gradients  (以及该页面内的大部分链接页面的资料) 首先区分下,平常给的纯色backgrou ...

  6. 14 Iterator和for...of循环

    Iterator和for...of循环 首先 Iterator 是一个接口. 标准是 function makeIterator(array) { var nextIndex = 0; return ...

  7. ASP.NET Forms 身份验证

    ASP.NET Forms 身份验证 在开发过程中,我们需要做的事情包括: 1. 在 web.config 中设置 Forms 身份验证相关参数.2. 创建登录页. 登录页中的操作包括: 1. 验证用 ...

  8. webapi-test

  9. codevs1257 打砖块

    题目描述 Description 在一个凹槽中放置了n层砖块,最上面的一层有n块砖,第二层有n-1块,--最下面一层仅有一块砖.第i层的砖块从左至右编号为1,2,--i,第i层的第j块砖有一个价值a[ ...

  10. 思考JavaScript异常如何转为知识库?

    线上 js 报错会变成一个邮件,发给前端开发 team,每个人自己认领.解决.其实这是一个不错的选择,也解决了最基本的问题:立即响应,修掉.不过也存在着一个问题,如何避免同样的错误?我的初步想法是这样 ...