美文网首页
isa和superclass

isa和superclass

作者: iLeooooo | 来源:发表于2019-01-26 16:56 被阅读7次

    D、题:对象的isa指针指向哪里?
    答:
    1. instance的isa指向class对象,class的isa指向meta-class对象
    2. meta-class的isa指向基类的meta-class对象,基类的isa指向自己。
    3. 当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用;
    4. 当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用。
    

    拓展:
    class对象的superclass指针指向哪里?
    答:@interface Student: Person   @interface Person: NSObject
    1. 当Student的instance对象要调用Person的对象方法时,
      会先通过instance的isa找到Student的class,
      然后通过superclass找到Person的class,
      最后找到对象方法的实现进行调用。
    2. 类对象的superclass指针指向父类的class
    
    meta-class对象的superclass指针指向哪里?
    答:@interface Student: Person   @interface Person: NSObject
    1. 当Student的class对象要调用Person的类方法时,
      会先通过class的isa找到Student的meta-class,
      然后通过superclass找到Person的meta-class,
      最后找到类方法的实现进行调用。
    2. 元类对象的superclass指针指向父类的meita-class
    

    isa、superclass总结:

    1. instance的isa指向class
    2. class的isa指向meta-class
    3. meta-class的isa指向基类的meta-class(基类的meta-class的isa指向自己)
    4. class的superclass指向父类的class(如果没有父类,则superclass为nil)
    5. meta-class的superclass指向父类的meta-class(基类的meta-class的superclass指向基类的class)
    6. instance调用方法的轨迹:isa找到class,方法存在,直接调用方法实现,如果方法不存在,就通过superclass找到父类,同理;如果superclass为nil,就会报错(unrecognized selector sent to instance)。
    7. class调用方法轨迹:isa找到meta-class,方法存在,直接调用方法实现,如果方法不存在,就通过superclass找到父类,同理;如果基类meta-class中方法还不存在,就会通过superclass找到基类的class,这里如果还没有方法,此时superclass为nil,就会报错(unrecognized selector sent to class)。
    8. 方法调用:isa->superclass->superclass->...->superclass=nil
    
    isa,superclass
    isa的值找class:
    1. 从64bit开始,isa需要进行一次位运算,才能计算出class的真实地址。即:isa & isa_mask     & ISA_MASK
    # if __arm64__
      #define ISA_MASK        0x0000000ffffffff8ULL
    # elif __x86_64__
      #define ISA_MASK        0x00007ffffffffff8ULL
    # endif
    

    E、题:OC的类信息存放在哪里?
    答:
    1. 对象方法、属性、成员变量、协议信息等存放在class对象中;
    2. 类方法存放在meta-class对象中;
    3. 成员变量的具体值存放在instance对象中。
    

    相关文章

      网友评论

          本文标题:isa和superclass

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