1. 程式人生 > >iOS中從零開始使用protobuf

iOS中從零開始使用protobuf

讓我們一起開啟下面這個連結 https://github.com/alexeyxo/protobuf-objc
在github上有protobuf-objc,其中的readme可以教會我們安裝proto到咱們電腦裡面。然後利用protoc,也就是protobuf的編譯器可以編譯.proto檔案,生成一些.h和.m檔案。 在移動App中,使用protobuffer可以做儲存,可以做網路傳輸,可以幹很多和資料打交道的事情。 最簡單的,加入做一個APP,你要記錄使用者資料對吧?使用者賬號是?密碼是?性別是?有沒有女朋友? 為了記錄這些資料到伺服器,就需要合適的資料結構。有人說,為什麼一定要用protobuf?為什麼不用其他的如json?如xml?關於這個問題,請到stackoverflow,csdn等格調甚高的地方去尋找,去發現。。我要用的原因,就是我需要用,不用就會落後,就會捱打。。
首先是怎麼安裝protobuf這個工程。 (摘抄一段來自
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這個工程,build腳本里面做的是編譯
注意:編譯工程過程中,有可能會出現錯誤。別慌!看編譯錯誤的提示。一般錯誤只是因為環境變數和路徑沒有配置好,少了一些東西,例如少了編譯protobuf這個工程的依賴庫,按照提示新增路徑即可
有了工程以後,我們就可以開始測試一下怎麼用protobuf了
開啟Xcode!新建一個工程! 然後有兩個方法把protobuf新增到你的工程裡面,一個是直接新增,一個是利用cocoapod 強烈推薦後者,因為cocoapods能夠很方便的管理第三方類庫,以後人家的工程升級了,你只需要一行 pod update 就ok~duang~
關於安裝和使用cocoapod,屬於另一個話題,看另一個博文 在Podfile新增下面這個句子
platform :ios , 6.0
pod "ProtocolBuffers", "~> 1.9.7"

在儲存之後,到終端,cd到工程裡面,
pod install

等一會,cocoapod就會幫我們新增好,以後我們就應該開啟 project的workspace,因為添加了pod作為子工程。
還沒結束 在你的工程裡面,新建一個資料夾,命名假如叫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。 編譯命令如下: 先開啟工程,建議單獨新建一個資料夾作為輸出路徑,例如工程下新建資料夾Gen,用來放generate出來的.pb.h檔案&&.pb.m檔案 開啟終端 cd到工程路徑下
protoc --plugin=/usr/local/bin/protoc-gen-objc person.proto --objc_out="./Gen"

大功告成!