iOS知识点-19. 谈谈对Objective-C和Swift 动态特性的理解

Swift vs. Objective-C
  1. 谈谈对Objective-C和Swift 动态特性的理解

runtime其实就是Objective-C的动态机制。runtime执行的是编译后的代码,这时它可以动态加载对象、添加方法、修改属性、传递信息等等。具体过程是在Objective-C中对象调用方法时,如 [self.tableview reload],发生了两件事。

  • 编译阶段,编译器(compiler)会把这句话翻译成objc_msgSend(self.tableview, @selector(reload)),把消息发送给self.tableview。

  • 运行阶段,接收者self.tableview会响应这个消息,期间可能会直接执行、转发消息,也可能会找不到方法崩溃。

所以整个流程是编译器编译—>给接收者发送消息—>接收者响应消息三个流程。

如 [self.tableview reload] 中, self.tableview就是接收者, reload就是消息,所以方法调用的格式在编译器看来是 [receiver message]。

其中接收者如何响应代码,就发生在运行时(runtime)。runtime执行的是编译后的代码,这时它可以动态加载对象、添加方法、修改属性、传递信息等等,runtime的运行机制就是Objective-C的动态特性。

Swift目前被公认为是一门静态语言。它的动态特性都是通过桥接OC来实现。如果要把动态特性写的更Swift一点,可以用protocol来处理,比如OC中reflection这样写:

* if ([someImage respondsToSelector:@selector(shake)]) {
*   [someImage performSelector:shake];
* }

Swift中可以这样写:

* if let shakeableImage = someImage as? Shakeable {
*   shakeableImage.shake()
* }
上一题目录完结
    原文作者:萌小奇
    原文地址: https://www.jianshu.com/p/d14351fa11c0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞