[self class] [self superclass] [super class] [super supclass]

这里我先说结论:
[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的父类

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,032评论 0 9
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 2,319评论 0 7
  • 一、Runtime的介绍 Objective-C是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同 O...
    IIronMan阅读 619评论 0 6
  • 忙里偷闲的中午。雨过天晴,虽然秋风瑟瑟,但还是抵不住想要瞎逛的闲心。 从新大地走到中都,喝上一杯暖暖的奶绿。分外满...
    壹易阅读 359评论 0 0
  • 十号,今天是进藏途中第三天,貌似出来了半个月之久。 出发前,我看到飞哥戴了一块手表,还问这啥手表。他说专门买的海拔...
    铁岸141319阅读 1,496评论 14 9

友情链接更多精彩内容