在OC中靈活的Runtime機制雖然有很多實用之處,衍生出的ReactNative、HotFix也用在很多項目里,但它也有著難以避免的缺陷--運行速度緩慢、內(nèi)存占用高:
占用內(nèi)存高:每當一個程序開啟,總要把每個類對應(yīng)的一對兒結(jié)構(gòu)體生成保存,如果程序中有一百個、一千個類也要全部生成,每一個實例申請時,為實例的實例變量所預(yù)留的空間也要一直保持只到實例釋放,即使它并不被使用。
運行速度慢:消息發(fā)送機制,使得每次方法調(diào)用都要層層查找,如果使用了forward和invocation那速度又會被拖慢。Apple在方法調(diào)用中使用了一個Cache緩解了一些,但在第一次調(diào)用每一個方法時,依舊很慢慢慢。
在Swift中,Swift中的類和方法是在編譯時就確定的,本身屬于靜態(tài)語言,但強大又靈活付諸了Apple很多心思的Runtime又怎么能拋棄掉呢,況且它在很多方面確實很好用。Swift兼容OC,在使用OC中的類時,依舊會Runtime:
@objc,用來將Swift的API導(dǎo)出給OC與OC runtime,如果繼承NSObject類,會自動的加入這個標識。加了該標識的方法、屬性都無法保證都會被運行時調(diào)用,Swift會做靜態(tài)優(yōu)化。
@dynamic,完全改為動態(tài)調(diào)用。使用這個標識也會隱形的加入@objc。
相關(guān)文章:
http://m.itdecent.cn/p/9c36a5b7820a