iOS 初識(shí)內(nèi)聯(lián)函數(shù)inline

一次在項(xiàng)目中看見這樣的code

CG_INLINE void POST_NOTIFICATION(NSString *name, id object, NSDictionary *userInfo){
    [[NSNotificationCenter defaultCenter] postNotificationName:name object:object userInfo:userInfo];
}

#  define CG_INLINE static inline

搜索一下inline發(fā)現(xiàn)叫內(nèi)聯(lián)函數(shù),當(dāng)然static inline同常是成對(duì)出現(xiàn)的

static自不用多說,表示在當(dāng)前文件中應(yīng)用,如 static A,在其它文件中也可以出現(xiàn)static A不會(huì)導(dǎo)致重名的錯(cuò)誤。

作用:

1.替代宏 查看一下YYKit

static inline CGFloat CGFloatFromPixel(CGFloat value) {
    return value / YYScreenScale();
}

//YYScreenScale()方法說明:
CGFloat YYScreenScale() {
    static CGFloat scale;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        scale = [UIScreen mainScreen].scale;
    });
    return scale;
}

static inline修飾的是函數(shù),當(dāng)然它們之間有區(qū)別,inline可以解決函數(shù)調(diào)用效率的問題:
函數(shù)之間調(diào)用,是內(nèi)存地址之間的調(diào)用,當(dāng)函數(shù)調(diào)用完畢之后還會(huì)返回原來函數(shù)執(zhí)行的地址。函數(shù)調(diào)用有時(shí)間開銷,內(nèi)聯(lián)函數(shù)就是為了解決這一問題
沒有使用`static inline修飾的內(nèi)聯(lián)函數(shù)的mian函數(shù)匯編代碼中,會(huì)出現(xiàn) call 指令!這就是區(qū)別!調(diào)用call指令就是就需要:

  • (1)將下一條指令的所在地址(即當(dāng)時(shí)程序計(jì)數(shù)器PC的內(nèi)容)入棧
  • (2)并將子程序的起始地址送入PC(于是CPU的下一條指令就會(huì)轉(zhuǎn)去執(zhí)行子程序)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容