Objc消息发送与消息转发

一、消息发送:

isa指针:

isa指针指向对象所属的类

元类:

类对象的类,元类是必不可少的,因为它存储了类的类方法。每个类都必须有独一无二的元类,因为每个类都有独一无二的类方法。根元类的元类则就是它自己。也就是说基类的元类的isa指针指向他自己。

元类的类:

所有的元类都使用根元类(继承体系中处于顶端的类的元类)作为他们的类。这就意味着所有NSObject的子类(大多数类)的元类都会以NSObject的元类作为他们的类。

发送消息:

  • 对象发送消息,是在对象的类的方法列表中寻找
  • 发送消息,是在类的元类的方法列表中寻找

实例与类对象 消息机制:

实例对象发送消息 消息机制:
1、实例对象通过isa找到类对象
2、在类对象的缓存方法列表中寻找方法
3、在类对象的方法列表中寻找
4、往父类上查找(缓存列表,方法列表)
5、抛出异常(异常前会走消息转发机制)

类对象发送消息 消息机制:
1、类对象通过isa指针找到元类
2、元类的缓存方法列表中寻找方法
3、元类的方法列表中寻找方法
4、往父类继承链上查找
5、抛出异常(异常前会走消息转发机制)

对象继承关系

image.png

二、消息转发

1、消息未被找到
2、执行_class_resolveMethod (根据传入的class是不是元类来选择添加类方法或者实例方法)
3、forwardingTargetForSeletor(选择备用接收者重新发送消息)
4、methodSignatureForSelector (如果返回nil,则抛出异常)
5、forwardInvocation

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,872评论 0 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,868评论 1 32
  • 一、OC语言的特性 首先,想要了解iOS的消息发送机制,我们需要先理解OC这门语言。相较于静态语言而言,动态语言是...
    学知无涯阅读 4,202评论 0 9
  • 一、Runtime简介 Runtime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消...
    林安530阅读 4,683评论 0 2
  • 《六项精进》打卡第35天 姓名:汪何炯 公司.:宁波万尚进出口有限公司 组别:340期【反省一组】学员兼队长 【知...
    汪何炯阅读 1,198评论 0 0

友情链接更多精彩内容