美文网首页
方法调用-底层原理分析

方法调用-底层原理分析

作者: 攻克乃还_ | 来源:发表于2018-03-21 17:13 被阅读15次
    近期很多朋友问起这个方法调用的流程,小编在这里整理了一下:

    小编致力于用精简的语言说明不精简的问题

    一、对象如何找到对象方法来调用:

    • 对象方法存放在类中,类方法存放在元类(meta class)中。
    • 类调用的方法,在runtime底层,会把类转化为类对象再调用方法。
    • 每一个类都有一个方法列表(MethodList)(已实现的方法)。
    1.根据isa指针找到所属类
    2.根据方法编号在方法列表中找到类中的方法名
    3.根据方法名到方法区找到方法的实现
    

    二、类如何找到类方法来调用:

    • 元类保存了类方法列表
    • 元类(meteClass)是类,也是对象
    1.根据所属类的isa指针找到元类
    2.根据方法编号在类方法列表中找到类中的方法名
    3.根据方法名到方法区找到方法的实现
    4.如果没有,向父元类查找实现
    

    三、方法调用总流程:

    1.在对象自己缓存的方法列表中找方法编号,根据编号执行其实现
    2.没有,执行 ‘一’
    3.没有找到方法编号,说明这个类没有实现该方法,根据类的isa指针找到父类执行‘一’
    4.一直到根类也没有方法编号,转向‘调用未实现方法的拦截’的方法可以在方法里面做处理
    5.没做处理,报错崩溃
    

    相关文章

      网友评论

          本文标题:方法调用-底层原理分析

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