- 純Swift類的函數(shù)調(diào)用已經(jīng)不再是Objective-c的運(yùn)行時(shí)發(fā)消息,而是類似C++的vtable,在編譯時(shí)就確定了調(diào)用哪個(gè)函數(shù),所以沒法通過runtime獲取方法、屬性。
- TestSwiftVC繼承自UIViewController,基類為NSObject,而Swift為了兼容Objective-C,凡是繼承自NSObject的類都會(huì)保留其動(dòng)態(tài)性,所以我們能通過runtime拿到他的方法。(表示這個(gè)類可以被OC使用)
- 可以知道@objc是用來將Swift的API導(dǎo)出給Objective-C和Objective-C runtime使用的,如果你的類繼承自O(shè)bjective-c的類(如NSObject)將會(huì)自動(dòng)被編譯器插入@objc標(biāo)識(shí)。
- 純Swift類沒有動(dòng)態(tài)性,但在方法、屬性前添加dynamic修飾可以獲得動(dòng)態(tài)性。
繼承自NSObject的Swift類,其繼承自父類的方法具有動(dòng)態(tài)性,其他自定義方法、屬性需要加dynamic修飾才可以獲得動(dòng)態(tài)性。
若方法的參數(shù)、屬性類型為Swift特有、無法映射到Objective-C的類型(如Character、Tuple),則此方法、屬性無法添加dynamic修飾(會(huì)編譯錯(cuò)誤), dynamic破壞swift的靜態(tài)化
Swift類在Objective-C中會(huì)有模塊前綴 - 所有運(yùn)行時(shí)方法都依賴TypeEncoding,也就是method_getTypeEncoding返回的結(jié)果,他指定了方法的參數(shù)類型以及在函數(shù)調(diào)用時(shí)參數(shù)入棧所要的內(nèi)存空間,沒有這個(gè)標(biāo)識(shí)就無法動(dòng)態(tài)的壓入?yún)?shù)(比如testReturnVoidWithaId: Optional("v24@0:8@16") Optional("v"),表示此方法參數(shù)共需24個(gè)字節(jié),返回值為void,第一個(gè)參數(shù)為id,第二個(gè)為selector,第三個(gè)為id),而Character和Tuple是Swift特有的,無法映射到OC的類型,更無法用OC的typeEncoding表示,也就沒法通過runtime獲取了。
Swift Runtime
最后編輯于 :
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 轉(zhuǎn)載原文地址 Swift是蘋果2014年發(fā)布的編程開發(fā)語言,可與Objective-C共同運(yùn)行于Mac OS和iO...
- 分析用例 我們拿一個(gè)純Swift類和一個(gè)繼承自NSObject的類的類來做分析,這兩個(gè)類里包含盡量多的Swift的...
- 轉(zhuǎn)載自:移動(dòng)開發(fā)前線 Swift是蘋果2014年發(fā)布的編程開發(fā)語言,可與Objective-C共同運(yùn)行于Mac O...
- 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
- 你說這個(gè)世界上有那么多美好的東西,也有那么多優(yōu)秀的人,真想全都占為自有啊。 可我們不能啊。因?yàn)槲覀儾皇巧系?,不能?..