static inline NSString * imageURLKeyForState(UIControlState state) {
return [NSString stringWithFormat:@"image_%lu", (unsigned long)state];
}
什么是內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)是inline修飾的函數(shù), 函數(shù)不是在調(diào)用時(shí)發(fā)生控制轉(zhuǎn)移, 而是在編譯時(shí)將函數(shù)體嵌入每一處調(diào)用.
內(nèi)聯(lián)函數(shù)用法
inline 關(guān)鍵字用來(lái)定義一個(gè)類(lèi)的內(nèi)聯(lián)函數(shù),引入他的主要目的是用它來(lái)替代C中表達(dá)式形式的宏定義(其實(shí)它的用法跟宏一樣,只不過(guò)比宏的安全性,效率更好).
內(nèi)聯(lián)函數(shù)與宏比較
- 宏在使用時(shí),僅僅只做預(yù)處理器符號(hào)表中的簡(jiǎn)單替換,因此它不能進(jìn)行參數(shù)有效性的檢測(cè),也不能享受C編譯器嚴(yán)格類(lèi)型檢查的好處
- 宏返回值不能返回不能被強(qiáng)制轉(zhuǎn)換成想要的類(lèi)型
- 內(nèi)聯(lián)函數(shù)也是函數(shù), 不需要預(yù)編譯, 宏需要預(yù)編譯
內(nèi)聯(lián)函數(shù)和函數(shù)的比較
- 集成了宏的優(yōu)點(diǎn),使用時(shí)直接用代碼替換;
- inline函數(shù)避免了普通函數(shù)的在匯編時(shí)必須調(diào)用call的缺點(diǎn),取消了函數(shù)的參數(shù)壓棧,減少了調(diào)用的開(kāi)銷(xiāo),提高效率,所以執(zhí)行速度比一般函數(shù)的執(zhí)行速度快.
總結(jié)
- 可以使用inline函數(shù)完全替代宏;
- 內(nèi)聯(lián)函數(shù)適用于簡(jiǎn)單的函數(shù), 因?yàn)闀?huì)在調(diào)用它的地方進(jìn)行展開(kāi), 函數(shù)復(fù)雜會(huì)使代碼膨脹;
- 在內(nèi)聯(lián)函數(shù)內(nèi)不允許使用循環(huán)語(yǔ)句和開(kāi)關(guān)語(yǔ)句.如果內(nèi)聯(lián)函數(shù)有這些語(yǔ)句,則編譯將該函數(shù)視同普通的函數(shù)那樣產(chǎn)生函數(shù)調(diào)用代碼,遞歸函數(shù)是不能用來(lái)做內(nèi)聯(lián)函數(shù)的;
- 內(nèi)聯(lián)函數(shù)需定義在調(diào)用之前