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