学计算机的那个

不是我觉到、悟到,你给不了我,给了也拿不住;只有我觉到、悟到,才有可能做到,能做到的才是我的.

0%

Swift和OC的区别

Swift和OC的区别?

swift是静态语言,有类型推断,OC是动态语言。
swift支持静态派发(效率高)、动态派发(函数表派发、消息派发)方式,OC支持动态派发(消息派发)方式。
swift的协议不仅可以被类实现,也可以被struct和enum实现
swift有元组类型、支持运算符重载

swift的派发机制

函数的派发机制:静态派发(直接派发)、函数表派发、消息派发

swift派发机制总结:

  1. swift中所有值类型:struct、enum使用直接派发。
  2. swift中协议的extensions(类似于OC的分类)使用直接派发,初始声明函数使用函数表派发
  3. swift中class中extensions使用直接派发,初始化声明函数使用函数表派发,dynamic修饰的函数使用消息派发。
  4. swift中NSObject的子类用@nonobjc或final修饰的函数使用直接派发,初始声明函数使用函数表派发,dynamic修饰的extensions使用消息派发
  5. swift中函数派发查看方式:可将swift代码转换为SIL(中间码)

swiftc -emit-silgen -O example.swift

swift显示指定派发方式?

  1. 添加final关键字的函数使用直接派发
  2. 添加static关键字函数使用直接派发
  3. 添加@inline关键字的函数告诉编译器可以使用直接派发
  4. 添加dynamic关键字函数使用消息派发
  5. 添加@objc关键字的函数使用消息派发