美文网首页
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