美文网首页
[self class] [self superclass]

[self class] [self superclass]

作者: 高乔人 | 来源:发表于2019-02-01 12:46 被阅读4次

    这里我先说结论:
    [self class] 返回的肯定是方法调动者
    [self superclass] 返回的肯定是receiver 的父类
    [super class] 返回的依然是receiver;为什么呢?看底层实现会发现,super 首先会调用,不会再同坐ISA指针去找,直接去调用super 会拿到super的方法列表,然后去调用class方法,class方法的具体实现在NSObject里面,因为源码看不到,通过猜想,验证后,发现其实 就是
    -(Class)class{
    reture [objc_getClass(self)];
    }
    这样就能发现,其实返回的是self ,也就是receiver。
    super的底层实现又是什么呢?clang readwrite 查看源码会发现。其实就是一个结构体里面实现:
    struct objc_super{
    __unsafe_unretained _Nonnull id receiver;//消息接受者
    __unsafe_unretained _Nonnull Class super_class;//消息接受者的父类
    }
    解释只有前三个问题已经解决,最后一个[super superclass]呢?
    其实可以这样写
    -(Class)superclass{

    reture [class_getSuperclass(objc_getClass(self)];
    }
    (objc_getClass(self)返回的是receiver
    class_getSuperclass(receiver)返回的就是: receiver的父类
    所以:[self class] 返回receiver
    [self superclass] 返回receiver的父类
    [super class] 返回receiver
    [super superclass] 返回receiver的父类

    相关文章

      网友评论

          本文标题:[self class] [self superclass]

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