在swift中方法调度分为两种,直接调用和查找调用
struct结构体的方法调用方式为直接调用,直接调用函数地址
class类的方法调用方式为查找调用,函数都按照顺序存储在vtable中,需要偏移
效率上来讲应该是直接调用更快吧
举例说明,打开汇编调式面板
struct YMStruct {
func struct_test() {
print("struct_test")
}
}
class YMClass {
func class_test() {
print("class_test")
}
}
let str = YMStruct()
str.struct_test()
let cla = YMClass()
cla.class_test()

extension 中的方法
在swift中,写在extension中的方法是不能被继承的,因为也是直接调用,并不在vtable中,不可以被重写
final 关键字
在swift中,使用final修饰的方法和属性,也不会写入vtable中,子类不可重写,只可以调用
@objc 关键字
在button添加方法时#selector,编译器会提示我们使用@objc关键字
如果需要oc与swift混编,调用swift的类时,不仅是添加@objc关键字,还需要继承于NSObjc
dynamic 关键字
标记为dynamic的变量/函数会隐式的加上@objc关键字,它会使用OC的runtime机制,Swift 为了追求性能,Swift 类型的成员或者方法在编译时就已经决定,而运行时便不再需要经过一次查找,想要实现OC的方法交换或者kvo都需要要添加dynamic关键字