iOS開發(fā)之Protobuf-oc 環(huán)境搭建及使用

一.前言介紹

? ? ? ? 為避免后續(xù)接入 protobuf 功能的iOS開發(fā)人員少走彎路,整理了相關(guān)文檔供參考S势ā6丝恰!

1.背景簡介

? ? ? ? ?ProtoBuf (Google Protocol Buffer)是由google公司用于數(shù)據(jù)交換的序列結(jié)構(gòu)化數(shù)據(jù)格式晃洒,具有跨平臺、跨語言朦乏、可擴展特性球及,類型于常用的XML及JSON,但具有更小的傳輸體積、更高的編碼、解碼能力栗精,特別適合于數(shù)據(jù)存儲沿彭、網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)葘Υ鎯w積镊尺、實時性要求高的領(lǐng)域朦佩。以 .proto為后綴,有自己的編譯器 protoc, protoc2 和 protoc3 版本

2.主要用途

? ? ? ? 主要用于結(jié)構(gòu)化數(shù)據(jù)串行化的靈活鹅心、高效吕粗、自動的方法,有如XML旭愧,不過他更小,更快宙暇,也更簡單输枯。你可以定義自己的數(shù)據(jù)結(jié)構(gòu),然后使用代碼生成器生成的代碼來讀寫這個數(shù)據(jù)結(jié)構(gòu)占贫。甚至可以在無需重新部署程序的情況下更新數(shù)據(jù)結(jié)構(gòu)桃熄。

3.時間復(fù)雜度

? ? ? ?時間開銷: XML格式化(序列化)的開銷還好;但是XML解析(反序列化)的開銷就不敢恭維了型奥。 但是protobuf在這個方面就進行了優(yōu)化瞳收。可以使序列化和反序列化的時間開銷都減短厢汹。

4.空間復(fù)雜度

? ? ? ?空間開銷:protobuf相比其他傳輸也減少了很多螟深。

5.兼容性

? ? ? ?支持向后兼容和向前兼容,也就是說當(dāng)客戶端和服務(wù)器同時使用一塊協(xié)議的時候烫葬, 當(dāng)客戶端在協(xié)議中增加一個字節(jié)界弧,并不會影響客戶端的使用

二.環(huán)境搭建

1.下載protobuf

使用git的方式到開源社區(qū)下載protobuf,在終端種輸入以下命令:

git clone?https://github.com/google/protobuf.git

2.安裝brew

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

此處會下載多個插件,大概需要執(zhí)行3-5分鐘左右

PS:執(zhí)行這一步的時候可能會error443 connect報錯搭综,這個時候你不要心慌垢箕,只需將mac上的終端大退重新從第一步開始執(zhí)行就ok了,親測可以6医怼L趸瘛!

3.使用brew安裝protoc

brew install protobuf

4.安裝 automake

brew install automake

brew install libtool

5.將ProtoBuf協(xié)議文件編譯為OC文件

protoc --proto_path=. --objc_out=. UpDriverPosition.proto

protoc 為proto的生成指令 后面添加 參數(shù)

參數(shù)的形式為: --參數(shù)命令名=參數(shù)

?--proto_path=.??指出proto文件所在的根目錄是哪里, 如果用?.?說明是當(dāng)前目錄

?--objc_out=.??指出 生成目錄在哪里, 如果用?.?說明是當(dāng)前目錄

最后跟 proto文件的名稱,

需要注意的事 proto 里面需要指出pb語法的版本; 如??syntax = "proto2";??有??optional??關(guān)鍵字 說明是??proto2?版本

生成的?.h?語?.m?文件 只能使用OC的MRC模式,暫時不支持ARC.所以剛添加到項目 報錯很正常.

三.通過cocopods安裝Protobuf插件

在prodfile加入 pod 'Protobuf', '3.11.4'

執(zhí)行pod setup ----> pod install ?這里看個人習(xí)慣執(zhí)行命令就好了(關(guān)于cocopods安裝和命令處理這里不過多解釋)

執(zhí)行完以后Pods下面會多出一個Protobuf文件蒋歌,就可以愉快的上代碼了

四.demo核心代碼

在Person.proto中寫入:

syntax?= "proto3";

message?Person {

? ? string name = 1;

? ? int64 age = 2;

? ? string gender = 3;

}

終端執(zhí)行命令生成 .h. .m文件帅掘,將文件拖拽到工程中后續(xù)使用

#import "ViewController.h"

#import "Person.pbobjc.h"

@interface?ViewController ()

@property?(nonatomic,?strong) Person *person;

@end

@implementation?ViewController

#pragma mark?- Life Cycle

- (void)viewDidLoad {

? ? [super?viewDidLoad];

? ? [self?testProtobuf];

}

- (void)testProtobuf {

NSLog(@"%@",?self.person);

? ? NSData *personData = [self?encode:self.person];

? ? NSLog(@"%@", personData);

? ? Person *decodeObj = [self?decode:personData];

? ? NSLog(@"%@", decodeObj);

? ? decodeObj.name = @"Tom";

? ? NSLog(@"%@", decodeObj);

}

#pragma mark?- Private Methods

- (nullable?NSData *)encode:(Person *)person {

?return?[person data];

}

- (nullable?Person *)decode: (nonnull?NSData *)data {

?return?[Person parseFromData:data error:nil];

}

#pragma mark?- Lazy Methods

- (Person *)person {

?if?(!_person) {

? ? ? ? _person = [Person new];

? ? ? ? _person.name = @"Carson";

? ? ? ? _person.age = 27;

? ? ? ? _person.gender = @"Male";

? ? }

?return?_person;

}

@end

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奋姿,隨后出現(xiàn)的幾起案子锄开,更是在濱河造成了極大的恐慌,老刑警劉巖称诗,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萍悴,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機癣诱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門计维,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撕予,你說我怎么就攤上這事鲫惶。” “怎么了实抡?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵欠母,是天一觀的道長。 經(jīng)常有香客問我吆寨,道長赏淌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任啄清,我火速辦了婚禮六水,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辣卒。我一直安慰自己掷贾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布荣茫。 她就那樣靜靜地躺著想帅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪计露。 梳的紋絲不亂的頭發(fā)上博脑,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音票罐,去河邊找鬼叉趣。 笑死,一個胖子當(dāng)著我的面吹牛该押,可吹牛的內(nèi)容都是我干的疗杉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚕礼,長吁一口氣:“原來是場噩夢啊……” “哼烟具!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奠蹬,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤朝聋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后囤躁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冀痕,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡荔睹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了言蛇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片僻他。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腊尚,靈堂內(nèi)的尸體忽然破棺而出吨拗,到底是詐尸還是另有隱情,我是刑警寧澤婿斥,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布劝篷,位于F島的核電站,受9級特大地震影響民宿,放射性物質(zhì)發(fā)生泄漏携龟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一勘高、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坟桅,春花似錦华望、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夸楣,卻和暖如春宾抓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豫喧。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工石洗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人紧显。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓讲衫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親孵班。 傳聞我的和親對象是個殘疾皇子涉兽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容