美文网首页
Objc消息发送与消息转发

Objc消息发送与消息转发

作者: Cass__ | 来源:发表于2019-03-09 12:17 被阅读2次

一、消息发送:

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

相关文章

网友评论

      本文标题:Objc消息发送与消息转发

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