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技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...
随机推荐
- 记lrd的高二上学期第五次调研考试
河北某某中学的调研考试其实是很好玩的经历呢.可惜没有太多机会了. 背景: NOIP2016回来之后没有好好学文化课-.自习能翘就翘了,衡中特产学案自助没有好好写(说来我好像从来没被老师查到过,上课写学 ...
- Shell入门
前言 日常用Python多一些,不过很多时候shell脚本更简单实用一些,所以有必要熟悉一下shell脚本.当然shell有他特定的一些场景,比方说我曾经改过一个vpn断线自动重连的脚本,简单实用. ...
- document.documentElement.clientHeight 和 $(window).height() 无法正确获取页面可视区高度
背景: 弹出层插件(自适应) 实现过程中突然发现在获取可视区高度时,无论document.documentElement.clientHeight 还是 $(window).height()都无法正确 ...
- 【原创】JEECMS v6~v7任意文件上传漏洞(2)
文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定 ...
- CMA-ES 算法
CMA-ES 算法 一.算法介绍 CMA-ES是Covariance Matrix Adaptation Evolutionary Strategies的缩写,中文名称是协方差矩阵自适应进化策略,主要 ...
- Nginx 和 IIS 实现动静分离
前段时间,搞Nginx+IIS的负载均衡,想了解的朋友,可以看这篇文章:<nginx 和 IIS 实现负载均衡>,然后也就顺便研究了Nginx + IIS 实现动静分离.所以,一起总结出来 ...
- ip扫描
ipscan24 Advanced IP Scanner http://www.advanced-ip-scanner.com/cn/
- hibernate+mysql的连接池配置
1:连接池的必知概念 首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...
- C#中DataTable中的Compute方法使用收集
原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详 ...
- mysql 数据类型
1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) ...