inline(內(nèi)聯(lián)函數(shù))的初步了解

今天沒事又重新看了一遍SDWEbImage看到了inline內(nèi)聯(lián)函數(shù)的使用,

SDWebImageCompat.m

所以在此整理一下,根據(jù) 1>什么是內(nèi)聯(lián)函數(shù), 2>及他的用法, 3> 它與宏定義和函數(shù)的區(qū)別 4> 使用時的注意點等方面來介紹一下.

一,什么是內(nèi)聯(lián)函數(shù):

內(nèi)聯(lián)函數(shù)是指用inline關鍵字修飾的函數(shù).內(nèi)聯(lián)函數(shù)不是在調(diào)用時發(fā)生控制轉(zhuǎn)移,而是在編譯時將函數(shù)體嵌入在每一個調(diào)用處.編譯時,類似于宏替換,使用函數(shù)體替換調(diào)用處的函數(shù)名,C語言原本是不支持inline的,但C++中原生對inline的支持讓很多C編譯器也為C語言實現(xiàn)了一些支持inline語義的擴展.C99將inline正式放入標準C語言中并提供了inline關鍵字.和C++中的inline一樣,C99的inline也是對編譯器的一個提示,提示編譯器盡量按照內(nèi)聯(lián)函數(shù)的定義去編譯,去除函數(shù)調(diào)用帶來的開銷.

二,內(nèi)聯(lián)函數(shù)的用法

inline 關鍵字用來定義一個類的內(nèi)聯(lián)函數(shù),引入他的主要目的是用它來替代C中表達式形式的宏定義(其實它的用法跟宏一樣,只不過比宏的安全性,效率更好).

三,inline與宏和函數(shù)的比較

和宏相比較的優(yōu)點:

1)宏在使用時,僅僅只做預處理器符號表中的簡單替換,因此它不能進行參數(shù)有效性的檢測,也不能享受C編譯器嚴格類型檢查的好處,另外它的返回值也不能被強制轉(zhuǎn)換為可轉(zhuǎn)換的合適類型,這樣,它的使用就存在著一系列隱患和局限.而使用內(nèi)聯(lián)函數(shù)時,會首先檢查它的參數(shù)的類型,保證調(diào)用正確,然后進行一系列的相關檢查,就像對待任何一個真正的函數(shù)一樣,這樣就消除了它的隱患和局限性.

2)內(nèi)聯(lián)函數(shù)也是函數(shù),不需要預編譯,而宏需要預編譯.

和直接使用函數(shù)的比較:

1)集成了宏的優(yōu)點,使用時直接用代碼替換;

2)inline函數(shù)避免了普通函數(shù)的在匯編時必須調(diào)用call的缺點,取消了函數(shù)的參數(shù)壓棧,減少了調(diào)用的開銷,提高效率,所以執(zhí)行速度比一般函數(shù)的執(zhí)行速度快.

四,相比之下inline內(nèi)聯(lián)函數(shù)確實有很多優(yōu)點,那么使用時我們需要注意些什么呢??

1)你可以使用inline函數(shù)完全替代表達式的宏定義;

2)內(nèi)聯(lián)函數(shù)一般只會用在函數(shù)內(nèi)容非常簡單的時候,這是因為內(nèi)聯(lián)函數(shù)的代碼會在任何調(diào)用它的地方展開,如果函數(shù)太復雜,代碼膨脹帶來的惡果很可能會大于效率提高帶來的好處.

3)在內(nèi)聯(lián)函數(shù)內(nèi)不允許使用循環(huán)語句和開關語句.如果內(nèi)聯(lián)函數(shù)有這些語句,則編譯將該函數(shù)視同普通的函數(shù)那樣產(chǎn)生函數(shù)調(diào)用代碼,遞歸函數(shù)是不能用來做內(nèi)聯(lián)函數(shù)的

4)內(nèi)聯(lián)函數(shù)需定義在調(diào)用之前.

最后希望大家能夠更好地掌握inline的用法,達到高效開發(fā)的目的.





最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谭梗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖肥卡,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡线衫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門惑折,熙熙樓的掌柜王于貴愁眉苦臉地迎上來授账,“玉大人,你說我怎么就攤上這事惨驶“兹龋” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵粗卜,是天一觀的道長屋确。 經(jīng)常有香客問我,道長续扔,這世上最難降的妖魔是什么攻臀? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮纱昧,結果婚禮上刨啸,老公的妹妹穿的比我還像新娘。我一直安慰自己砌些,他們只是感情好呜投,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著存璃,像睡著了一般仑荐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纵东,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天粘招,我揣著相機與錄音,去河邊找鬼偎球。 笑死洒扎,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的衰絮。 我是一名探鬼主播袍冷,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猫牡!你這毒婦竟也來了胡诗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎煌恢,沒想到半個月后骇陈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瑰抵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年你雌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片二汛。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡婿崭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出习贫,到底是詐尸還是另有隱情逛球,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布苫昌,位于F島的核電站颤绕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祟身。R本人自食惡果不足惜奥务,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袜硫。 院中可真熱鬧氯葬,春花似錦、人聲如沸婉陷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秽澳。三九已至闯睹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間担神,已是汗流浹背楼吃。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妄讯,地道東北人孩锡。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像亥贸,于是被迫代替她去往敵國和親躬窜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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