iOS中從零開始使用protobuf
在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 ProtobufBuilding the Objective-C Protobuf compiler
- Check if you have Homebrew
brew -v
- If you don't already have Homebrew, then install it
ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)
- Install the main Protobuf compiler and required tools
brew install automake
brew install libtool
brew install protobuf
- (optional) Create a symlink to your Protobuf compiler.
ln -s /usr/local/Cellar/protobuf/2.6.1/bin/protoc /usr/local/bin
- Clone this repository.
git clone https://github.com/alexeyxo/protobuf-objc.git
- 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 automakebrew install libtoolbrew 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.0pod ProtocolBuffers, ~> 1.9.7
在儲存之後,到終端,cd到工程裡面,pod install
等一會,cocoapod就會幫我們添加好,以後我們就應該開啟 project的workspace,因為添加了pod作為子工程。
還沒結束 在你的工程裡面,建立一個檔案夾,命名假如叫Protobuf 在這個檔案夾裡面建立一個proto檔案。例如要在本地儲存使用者資訊,那麼就建立一個user.proto 裡面內容可以如下package csdnblog;message PBUser {required string userId = 1; // 使用者IDoptional string nick = 2; // 使用者暱稱optional string avatar = 3; // 帳戶圖片optional string password = 7;optional string email = 8;optional string mobile = 9; // 手機號碼optional string qqOpenId = 10; // QQ IDoptional string sinaId = 11; // SINA UserIDoptional 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