美文网首页日常收录
Swift 方法调度

Swift 方法调度

作者: H丶ym | 来源:发表于2020-12-16 16:08 被阅读0次

    在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关键字

    相关文章

      网友评论

        本文标题:Swift 方法调度

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