让我们一起打开以下这个链接

在github上有protobuf-objc,当中的readme能够教会我们安装proto到咱们电脑里面。然后利用protoc,也就是protobuf的编译器能够编译.proto文件,生成一些.h和.m文件。
在移动App中。使用protobuffer能够做储存,能够做网络传输,能够干非常多和数据打交道的事情。

最简单的。增加做一个APP。你要记录用户数据对吧?用户账号是?password是?性别是?有没有女朋友?
为了记录这些数据到server,就须要合适的数据结构。

有人说。为什么一定要用protobuf?为什么不用其它的如json?如xml?关于这个问题,请到stackoverflow,csdn等格调甚高的地方去寻找。去发现。。

我要用的原因,就是我须要用,不用就会落后,就会挨打。。


首先是怎么安装protobuf这个project。
(摘抄一段来自https://github.com/alexeyxo/protobuf-objc的文档)

How To Install Protobuf

Building the Objective-C Protobuf compiler

  1. Check if you have Homebrew

    brew -v
  2. If you don't already have Homebrew, then install it

    ruby -e "$(curl -fsSL
    https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. Install the main Protobuf compiler and required tools

    brew install automake

    brew install libtool

    brew install protobuf
  4. (optional) Create a symlink to your Protobuf compiler.

    ln -s /usr/local/Cellar/protobuf/2.6.1/bin/protoc /usr/local/bin
  5. Clone this repository.

    git clone
    https://github.com/alexeyxo/protobuf-objc.git
  6. Build it!

    ./build.sh

什么?看不懂?没关系,本爷就是为了翻译才贴上的

首先,打开终端!


brew -v

:查看你的mac里面有没有装brew。brew是mac os里面,类似于ubuntu的apt-get的功能,都能够直接在终端输入命令然后安装程序。-v自然就是版本号version的意思

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

这一句半懂不懂,。大概就是利用curl工具訪问那个url。然后在ruby环境下载安装brew

brew install automake
brew install libtool
brew install protobuf

就是利用brew下载安装了。protobuf就是我们想要的,另外两个是依赖库

git clone https://github.com/alexeyxo/protobuf-objc.git
./build.sh

从github下载protobuf-objc这个project。build脚本里面做的是编译

注意:编译project过程中,有可能会出现错误。别慌。看编译错误的提示。一般错误仅仅是由于环境变量和路径没有配置好。少了一些东西,比如少了编译protobuf这个project的依赖库,依照提示加入路径就可以

有了project以后,我们就能够開始測试一下怎么用protobuf了

打开Xcode!新建一个project!

然后有两个方法把protobuf加入到你的project里面。一个是直接加入,一个是利用cocoapod
强烈推荐后者,由于cocoapods可以非常方便的管理第三方类库,以后人家的project升级了,你仅仅须要一行
pod update
就ok~duang~

关于安装和使用cocoapod,属于还有一个话题。看还有一个博文
在Podfile加入以下这个句子

platform :ios , 6.0
pod "ProtocolBuffers", "~> 1.9.7"

在保存之后,到终端,cd到project里面,
pod install

等一会,cocoapod就会帮我们加入好,以后我们就应该打开
project的workspace,由于加入了pod作为子工程。


还没结束
在你的project里面,新建一个目录,命名假如叫Protobuf
在这个目录里面新建一个proto文件。比如要在本地储存用户信息,那么就新建一个user.proto
里面内容能够例如以下
package csdnblog;

message PBUser {

required string userId = 1;                       // 用户ID
optional string nick = 2; // 用户昵称
optional string avatar = 3; // 用户头像 optional string password = 7;
optional string email = 8;
optional string mobile = 9; // 手机号码
optional string qqOpenId = 10; // QQ ID
optional string sinaId = 11; // SINA UserID
optional string weixinId = 12; // WeChat UserID
}

上面这个样例包含了几个要素。
一个是包名。包的概念在object c里面没有,java里面有。c++里面namespace也是差点儿相同意思。

顺便提一下。oc里面一般在库名前面加入两个字母,起的作用差点儿相同就是包的作用,作为类的上一层组织结构。
比如官方的NS。比如AFNetworking这样的第三方类库的AF。


回到正题。编写pb文件。第二个要素是message
一个message就是一个总体,里面有哪些必要的内容。哪些可选的内容。具体的proto语法随便一找一大把,就不啰嗦了。

写好了proto,接下来就是编译这个proto文件。protobuf-objc这个类库会编译声称一些源代码。是读写proto数据的接口API。
编译命令例如以下:
先打开project,建议单独新建一个目录作为输出路径,比如project下新建目录Gen,用来放generate出来的.pb.h文件&&.pb.m文件
打开终端
cd到project路径下
protoc --plugin=/usr/local/bin/protoc-gen-objc person.proto --objc_out="./Gen"

大功告成!


iOS中从零開始使用protobuf的更多相关文章

  1. 关东升的《从零開始学Swift》即将出版

    大家好: 苹果2015WWDC大会公布了Swift2.0,它较之前的版本号Swift1.x有非常大的变化.所以我即将出版<从零開始学Swift><从零開始学Swift>将在&l ...

  2. Bmob移动后端云服务平台--Android从零開始--(二)android高速入门

    Bmob移动后端云服务平台--Android从零開始--(二)android高速入门 上一篇博文我们简介何为Bmob移动后端服务平台,以及其相关功能和优势. 本文将利用Bmob高速实现简单样例,进一步 ...

  3. Bmob移动后端云服务平台--Android从零開始--(一)何为Bmob

    Bmob移动后端云服务平台--Android从零開始--(一)何为Bmob 在正式的项目开发中,单client不能满足我们的需求,须要实现client与服务端的连接. 而在编写Android服务端代码 ...

  4. 从零開始学习OpenCL开发(一)架构

    多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零開始做OpenCL开发>系列文章的 ...

  5. # 从零開始搭建Hadoop2.7.1的分布式集群

    Hadoop 2.7.1 (2015-7-6更新),Hadoop的环境配置不是特别的复杂,可是确实有非常多细节须要注意.不然会造成很多配置错误的情况.尽量保证一次配置正确防止重复改动. 网上教程有非常 ...

  6. 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹

    <PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...

  7. 从零開始学Swift之Hello World进化版

    上节课,也就是昨晚啦,我们学习到从零開始学Swift之Hello World.那一节仅仅有一句代码,大家会认为不够过瘾. 那么这节课,就给大家来多点瘾货吧! 先上图! //var 代表变量的类型, s ...

  8. 从零開始怎么写android native service?

    从零開始怎么写android native service Android service对于从事android开发的人都不是一个陌生的东西,非常多人可能会认为服务非常easy. 服务是简单,由于复杂 ...

  9. 《从零開始搭建游戏server》项目公布到Linux环境

    前言: 之前我们提及了怎样使用Maven来创建.管理和打包项目,也简单过了一遍Linux中搭建Java开发环境的步骤,如今我们就開始将我们之前开发的项目demo公布到Linux环境下.并让它正常执行起 ...

随机推荐

  1. APUE 学习笔记(四) 标准I/O库

    1.流与FILE对象 unix I/O系统调用都是针对文件描述符的 标准C的I/O函数都是针对流(文件指针)的,我们使用一个流与一个文件相关联   2.缓冲 标准I/O库提供缓冲的目的就是尽可能减少r ...

  2. 浏览器的 16ms 渲染帧--摘抄

    由于现在广泛使用的屏幕都有固定的刷新率(比如最新的一般在 60Hz), 在两次硬件刷新之间浏览器进行两次重绘是没有意义的只会消耗性能. 浏览器会利用这个间隔 16ms(1000ms/60)适当地对绘制 ...

  3. 【Visual Studio】LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_

    出现这个问题的原因:工程在转换过程中,发现有一些工程使用MD编译选项,有一些工程使用MTD编译选项,导致静态和动态连接MSVC的连接库有冲突.将全部工程改变MT或MTD编译,即可以解决. 工程 —&g ...

  4. LeetCode OJ——Plus One

    http://oj.leetcode.com/problems/plus-one/ 进位加法 #include <iostream> #include <vector> usi ...

  5. 使用iframe实现提交表单不刷新页面

    正常情况下,当你向服务器发送数据的时候,你的浏览器将会打开action页面,并且不会重回到当前页面.但是有的时候,我们因为各种各样的要求,而不希望浏览器在提交数据的时候去刷新当前的页面或者转向到新的页 ...

  6. 微信公众号手机端PC端多客服系统

    最近很多客户反应没有专门的客服坐在电脑面前,接收回复客户的问题:不能及时回复客户 咨询的问题,现在我们已经为此帮您解决烦恼!! 支持PC与手机端接收微信客户咨询与回复客户,让您随时随地及时回复客户咨询 ...

  7. 牛客网 牛客练习赛11 D.求距离

    D.求距离 链接:https://www.nowcoder.com/acm/contest/59/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言6 ...

  8. 【Exception】查看异常出现在具体的文件名/类名/方法名/具体行号

    今天在处理异常日志保存过程中,想要获取到异常抛出在具体在那个文件,哪个类下的哪个方法中的具体第几行,所以具体实现如下 try{ Integer adminID = Integer.parseInt(a ...

  9. OracleCPU使用情况查询

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

  10. OpenGL中FBO的概念及其应用 [转]

    http://www.cppblog.com/kongque/archive/2010/08/26/124754.html FBO一个最常见的应用就是:渲染到纹理(render to texture) ...