Swift 運行時機制

1.OC有一個很好的特征是動態(tài)性。
可以利用OC的動態(tài)性能夠獲得一個類的方法和屬性。
從而實現(xiàn)靈活的程序,但是純swift的類和繼承OC的Swift是否有runtime機制?

純Swift類的函數(shù)調用已經(jīng)不是OC那樣的運行時消息。而是類似C++的vtable,在編譯的時候,就決定調用哪個函數(shù)了。不像OC在運行時才確定調用哪個函數(shù)。

對于純的Swift類來說,無法通過objc runtime替換方法,拿不到這些方法和屬性。

對于繼承自NSObject類(比如NSObject)的Swift來說,將會自動被編譯器插入@objc標志。@objc標志是用來將Swift的API到處給Objective-C和Objective-C runtime使用的。查看下面:

加了@objc標識的方法、屬性無法保證都會被運行時調用,因為Swift會做靜態(tài)優(yōu)化。要想完全被動態(tài)調用,必須使用dynamic修飾。使用dynamic修飾將會隱式的加上@objc標識。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容