1监右、內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)(又被稱為在線函數(shù)或編譯時期展開函數(shù))是指在用inline
修飾的函數(shù)(這里指的是C++
或者C
語言的函數(shù))。
2潦牛、與普通函數(shù)的區(qū)別
我們都知道函數(shù)不管是OC
還是C/C++
最終都需要編譯成匯編指令眶掌,才能真正執(zhí)行。普通函數(shù)在被調(diào)用的時候需要CPU
執(zhí)行CALL
指令不同(需要完成程序計數(shù)器壓棧->執(zhí)行要執(zhí)行的函數(shù)語句->出棧程序計數(shù)器)巴碗,內(nèi)聯(lián)函數(shù)不需要這個調(diào)用過程朴爬,內(nèi)聯(lián)函數(shù)在編譯的時候,會直接在需要執(zhí)行內(nèi)聯(lián)函數(shù)的地方(普通函數(shù)執(zhí)行CALL
的匯編語句處)將內(nèi)聯(lián)函數(shù)的匯編片段copy一份并插入到此處橡淆,代替CALL
指令(類似于宏定義)召噩,而不需要普通函數(shù)的CALL
指令調(diào)用過程。因此內(nèi)聯(lián)函數(shù)的執(zhí)行效率是比較高的逸爵,但是由于copy
代碼片段蚣常,需要內(nèi)存消耗,所以內(nèi)聯(lián)函數(shù)是一種以空間換時間的方法痊银。
3、與宏定義的區(qū)別
宏定義只是簡單的字符串替換施绎,是不能做類型檢查溯革,內(nèi)聯(lián)函數(shù)相比而言就會更加安全
4、內(nèi)聯(lián)函數(shù)使用的注意項
內(nèi)聯(lián)函數(shù)通常都是比較簡單的代碼片段谷醉,不能包含循環(huán)致稀,遞歸(遞歸函數(shù)的內(nèi)聯(lián)擴展可能引起部分編譯器的無窮編譯)等的復(fù)雜流程,代碼最好不要超過5行
5俱尼、推薦使用內(nèi)聯(lián)函數(shù)代替宏定義
YYKit
抖单,AFNetworking
等一些優(yōu)秀的三方框架中就有大量的靜態(tài)(文件內(nèi)使用)內(nèi)聯(lián)函數(shù)使用static inline