一、消息发送:
isa指针:
isa指针指向对象所属的类
元类:
类对象的类,元类是必不可少的,因为它存储了类的类方法。每个类都必须有独一无二的元类,因为每个类都有独一无二的类方法。根元类的元类则就是它自己。也就是说基类的元类的isa指针指向他自己。
元类的类:
所有的元类都使用根元类(继承体系中处于顶端的类的元类)作为他们的类。这就意味着所有NSObject的子类(大多数类)的元类都会以NSObject的元类作为他们的类。
发送消息:
- 给
对象
发送消息,是在对象的类的方法列表中寻找 - 给
类
发送消息,是在类的元类的方法列表中寻找
实例与类对象 消息机制:
实例对象发送消息 消息机制:
1、实例对象通过isa找到类对象
2、在类对象的缓存方法列表中寻找方法
3、在类对象的方法列表中寻找
4、往父类上查找(缓存列表,方法列表)
5、抛出异常(异常前会走消息转发机制)
类对象发送消息 消息机制:
1、类对象通过isa指针找到元类
2、元类的缓存方法列表中寻找方法
3、元类的方法列表中寻找方法
4、往父类继承链上查找
5、抛出异常(异常前会走消息转发机制)
对象继承关系
二、消息转发
1、消息未被找到
2、执行_class_resolveMethod (根据传入的class是不是元类来选择添加类方法或者实例方法)
3、forwardingTargetForSeletor(选择备用接收者重新发送消息)
4、methodSignatureForSelector (如果返回nil,则抛出异常)
5、forwardInvocation