SDWebImage 讀代碼 UIButton+WebCache

UIButton+WebCache.h 的Api 中發(fā)現(xiàn)

- (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;

NS_REFINED_FOR_SWIFT 代表 重定義接口
當OC 與 Swift 混編的時候為了接口都可用在其后加上 NS_REFINED_FOR_SWIFT
那么在oc下是 sd_setImageWithURL
swift下bridge到Swift語言時是 __sd_setImageWithURL 方法 記住是兩個下劃線

發(fā)現(xiàn)了 一個修飾沒見過 static inline 滿臉懵??

static inline

1 static

先說下我能理解的吧 由static 修飾的變量會存在全局數(shù)據(jù)區(qū) 和 屬性 局部變量 本質(zhì)的區(qū)別是 staic 只有程序結(jié)束時才會釋放 而普通的局部變量和全局變量因為他是系統(tǒng)管理的 所以離開作用區(qū)域就會釋放 static的好處就是不需要重復創(chuàng)建消耗內(nèi)存 對于 經(jīng)常使用的變量就由其修飾吧

2 static inline

inline 內(nèi)聯(lián)函數(shù) static inline 就是修飾函數(shù)的 簡單的講就是代替 宏定義的 一種寫法 !
宏定義是預編譯 所以會消耗很多內(nèi)存 而且內(nèi)聯(lián)函數(shù)還有一個好處就是解決函數(shù)調(diào)用效率的作用 , 函數(shù)之間的調(diào)用其實就是 地址之間的調(diào)用, 當一個函數(shù)調(diào)用另一個函數(shù)時 程序要是必須回到上一個函數(shù)的地址的 所以會有效率問題
不用static inline 修飾的函數(shù) 匯編時 需要調(diào)用call指令
1 將下一條指令所在地址入棧
2 并將子程序的地址送入PC 這樣cpu就會調(diào)用子程序了
最后 static inline 比 宏定義更好的有點如下
1 因為向編譯器申請所以省略了地址壓棧(我感覺是空間換取時間的一種)
2 因為是函數(shù)不需要預編譯
3 因為是函數(shù)系統(tǒng)會檢測的他的參數(shù)減少了 隱患
BUT but b u t.......使用 static inline 需要注意
1 我們向程序申請了inline 但是程序不一定會執(zhí)行.
2 內(nèi)聯(lián)函數(shù)不能承擔大量代碼 如果代碼量過大 系統(tǒng)會默認申請失敗
3 內(nèi)聯(lián)函數(shù)內(nèi)不允許出現(xiàn)循環(huán) 開關(guān)語句
4 內(nèi)聯(lián)函數(shù)必須在調(diào)用之前定義

首先這個是Cagetory 一般的類 @property 會自動的生成實例變量和存取方法 但是Cagetory使用@property 是無法做得到的, 所以想要給Cagetory添加屬性需要用到關(guān)聯(lián)對象 AssociatedObject

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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