美文网首页
iOS知识点-19. 谈谈对Objective-C和Swift

iOS知识点-19. 谈谈对Objective-C和Swift

作者: 萌小奇 | 来源:发表于2018-12-20 11:21 被阅读29次
    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()
    * }
    
    上一题 目录 完结

    相关文章

      网友评论

          本文标题:iOS知识点-19. 谈谈对Objective-C和Swift

          本文链接:https://www.haomeiwen.com/subject/pzoccqtx.html