Swift 运行时机制

1.OC有一个很好的特征是动态性。
可以利用OC的动态性能够获得一个类的方法和属性。
从而实现灵活的程序,但是纯swift的类和继承OC的Swift是否有runtime机制?

纯Swift类的函数调用已经不是OC那样的运行时消息。而是类似C++的vtable,在编译的时候,就决定调用哪个函数了。不像OC在运行时才确定调用哪个函数。

对于纯的Swift类来说,无法通过objc runtime替换方法,拿不到这些方法和属性。

对于继承自NSObject类(比如NSObject)的Swift来说,将会自动被编译器插入@objc标志。@objc标志是用来将Swift的API到处给Objective-C和Objective-C runtime使用的。查看下面:

加了@objc标识的方法、属性无法保证都会被运行时调用,因为Swift会做静态优化。要想完全被动态调用,必须使用dynamic修饰。使用dynamic修饰将会隐式的加上@objc标识。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容