在OC中灵活的Runtime机制虽然有很多实用之处,衍生出的ReactNative、HotFix也用在很多项目里,但它也有着难以避免的缺陷--运行速度缓慢、内存占用高:
占用内存高:每当一个程序开启,总要把每个类对应的一对儿结构体生成保存,如果程序中有一百个、一千个类也要全部生成,每一个实例申请时,为实例的实例变量所预留的空间也要一直保持只到实例释放,即使它并不被使用。
运行速度慢:消息发送机制,使得每次方法调用都要层层查找,如果使用了forward和invocation那速度又会被拖慢。Apple在方法调用中使用了一个Cache缓解了一些,但在第一次调用每一个方法时,依旧很慢慢慢。
在Swift中,Swift中的类和方法是在编译时就确定的,本身属于静态语言,但强大又灵活付诸了Apple很多心思的Runtime又怎么能抛弃掉呢,况且它在很多方面确实很好用。Swift兼容OC,在使用OC中的类时,依旧会Runtime:
@objc,用来将Swift的API导出给OC与OC runtime,如果继承NSObject类,会自动的加入这个标识。加了该标识的方法、属性都无法保证都会被运行时调用,Swift会做静态优化。
@dynamic,完全改为动态调用。使用这个标识也会隐形的加入@objc。
相关文章:
//www.greatytc.com/p/9c36a5b7820a