提高你的開發(fā)效率——宏

宏定義不僅僅局限于一些簡單的常用固定標(biāo)記,對于可復(fù)用的的可移植的小功能性代碼阳液,也可以采用宏定義封裝誓酒,提高開發(fā)效率

本文通過一個(gè)實(shí)際例子引入主題


場景

在寫網(wǎng)絡(luò)請求的代碼時(shí),通常會做這樣一個(gè)處理嗅义,異步操作回調(diào)。這段代碼是通用的隐砸,所以可以利用宏定義抽取出來之碗,做可復(fù)用的封裝,下面通過代碼解讀季希。

代碼

#define within_main_thread(block,...)\
do {\
if ([[NSThread currentThread] isMainThread]) {\
if (block) {\
block(__VA_ARGS__);\
}\
} else {\
if (block) {\
dispatch_async(dispatch_get_main_queue(), ^{\
block(__VA_ARGS__);\
});\
}\
}\
} while (0);

分析

以上的代碼很簡單继控,大致的邏輯顯而易見,這里針對幾個(gè)地方進(jìn)行詳細(xì)分析:

  1. within_mian_thread(block,...)第一個(gè)參數(shù)是block胖眷,第二個(gè)為可變參數(shù),在宏定義的實(shí)際代碼中可以發(fā)現(xiàn)為__VA_ARGS__霹崎,并且被用作了block的參數(shù)珊搀,這樣就增加了宏的可拓展性。
  2. do{} while(0)效果和不用它是一樣的尾菇,程序只執(zhí)行一次境析,使用它的目的是:將實(shí)際代碼包裝在了括號中,這樣在編譯時(shí)替換為實(shí)際代碼時(shí)就更加穩(wěn)定派诬。由這個(gè)目的我們還可以想到其他手段劳淆,例如@try{} @finally{},將代碼放在@finally的括號中默赂。

實(shí)際使用

- (void)getData :(void (^)(NSString *, NSNumber *))complete {
    // 從網(wǎng)絡(luò)獲取到兩個(gè)數(shù)據(jù)沛鸵,str和num
    if (complete) {
        within_main_thread(complete, str, num);
    }
}

這里可能會有一個(gè)疑惑,從網(wǎng)絡(luò)獲取到的數(shù)據(jù)為何要在主線程中設(shè)置缆八,在異步線程中設(shè)置不也一樣嗎曲掰。這里的原因是考慮到安全性和封裝質(zhì)量,在主線程設(shè)置數(shù)據(jù)可以讓其他任何地方使用時(shí)不用關(guān)心數(shù)據(jù)的安全問題奈辰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栏妖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奖恰,更是在濱河造成了極大的恐慌吊趾,老刑警劉巖宛裕,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異论泛,居然都是意外死亡揩尸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門孵奶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疲酌,“玉大人,你說我怎么就攤上這事了袁±士遥” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵载绿,是天一觀的道長粥诫。 經(jīng)常有香客問我,道長崭庸,這世上最難降的妖魔是什么怀浆? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮怕享,結(jié)果婚禮上赠法,老公的妹妹穿的比我還像新娘。我一直安慰自己坏怪,他們只是感情好再愈,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跌帐,像睡著了一般首懈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谨敛,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天究履,我揣著相機(jī)與錄音,去河邊找鬼脸狸。 笑死最仑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肥惭。 我是一名探鬼主播盯仪,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜜葱!你這毒婦竟也來了全景?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤牵囤,失蹤者是張志新(化名)和其女友劉穎爸黄,沒想到半個(gè)月后滞伟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炕贵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年梆奈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片称开。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亩钟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳖轰,到底是詐尸還是另有隱情清酥,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布蕴侣,位于F島的核電站焰轻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昆雀。R本人自食惡果不足惜辱志,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狞膘。 院中可真熱鬧揩懒,春花似錦、人聲如沸挽封。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽场仲。三九已至,卻和暖如春退疫,著一層夾襖步出監(jiān)牢的瞬間渠缕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工褒繁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亦鳞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓棒坏,卻偏偏與公主長得像燕差,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子坝冕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361

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