Swift和OC的区别?
swift是静态语言,有类型推断,OC是动态语言。
swift支持静态派发(效率高)、动态派发(函数表派发、消息派发)方式,OC支持动态派发(消息派发)方式。
swift的协议不仅可以被类实现,也可以被struct和enum实现
swift有元组类型、支持运算符重载
swift的派发机制
函数的派发机制:静态派发(直接派发)、函数表派发、消息派发
swift派发机制总结:
- swift中所有值类型:struct、enum使用直接派发。
- swift中协议的extensions(类似于OC的分类)使用直接派发,初始声明函数使用函数表派发
- swift中class中extensions使用直接派发,初始化声明函数使用函数表派发,dynamic修饰的函数使用消息派发。
- swift中NSObject的子类用@nonobjc或final修饰的函数使用直接派发,初始声明函数使用函数表派发,dynamic修饰的extensions使用消息派发
- swift中函数派发查看方式:可将swift代码转换为SIL(中间码)
swiftc -emit-silgen -O example.swift
swift显示指定派发方式?
- 添加final关键字的函数使用直接派发
- 添加static关键字函数使用直接派发
- 添加@inline关键字的函数告诉编译器可以使用直接派发
- 添加dynamic关键字函数使用消息派发
- 添加@objc关键字的函数使用消息派发