美文网首页日常收录
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方法调度

    Struct: 在结构体中方法都是静态调用(直接调用),也就意味着在在编译连接完成之后当前这个函数的地址就已经确定...

  • Swift 方法调度

    在swift中方法调度分为两种,直接调用和查找调用struct结构体的方法调用方式为直接调用,直接调用函数地址cl...

  • Swift 方法(函数)调度

    Swift 方法(函数)调度 [TOC] 1. 前言 由于Objective-C是一门动态语言,方法的调度中主要是...

  • Swift进阶之内存模型和方法调度

    参考链接: Swift进阶之内存模型和方法调度 Swift 3必看:sizeof移进MemoryLayout 前言...

  • [Swift进阶]类与结构体的探究(下)

    前言 1.着重介绍了Swift的方法调度。通过汇编调试,Mach-O文件解析来验证方法调度的内存地址。2.异变方法...

  • swift方法调度总结

    方法调度 结论 Class中的方法public open internal 方法调度都是函数派发方式private...

  • swift进阶六:方法调度 & @objc & 指针

    swift进阶 学习大纲[https://www.jianshu.com/p/0fc67b373540] 方法调度...

  • iOS Swift 异变方法、方法调度

    一、异变方法(关键字:mutating) 值类型的属性只有在添加 mutating 关键字时才能被自身实例方法修改...

  • Swift 中的方法调度

    方法调度是程序在调用方法时选择执行哪些指令的方式。这是每次调用方法时发生的事情,但不是你经常关心的事情。在编写性能...

  • Swift 类的方法调度

    作者:Bel李玉链接:https://juejin.cn/post/6922071349473050638[htt...

网友评论

    本文标题:Swift 方法调度

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