方法调用-底层原理分析

近期很多朋友问起这个方法调用的流程,小编在这里整理了一下:

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

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

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

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

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

三、方法调用总流程:

1.在对象自己缓存的方法列表中找方法编号,根据编号执行其实现
2.没有,执行 ‘一’
3.没有找到方法编号,说明这个类没有实现该方法,根据类的isa指针找到父类执行‘一’
4.一直到根类也没有方法编号,转向‘调用未实现方法的拦截’的方法可以在方法里面做处理
5.没做处理,报错崩溃
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,841评论 0 9
  • Runtime是什么 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我...
    SuAdrenine阅读 905评论 0 3
  • 一、Runtime简介 Runtime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消...
    林安530阅读 1,082评论 0 2
  • 你有那么好的年纪 为什么不笑得更好看些 愿你足够强大的那天,不用被束缚 做你自己想做的事,你就是你,你是自由的 其...
    天真滴孩纸阅读 220评论 0 0
  • 一直以来,感觉自己总是“没心没肺”地活着。可是随着时间的流逝,人生经历的增加,越来越发现,可能自己再也回不...
    AaLohchiaoLi阅读 916评论 0 2