Objective-C 中 self 和 super

selfsuper 的区别:
self 是类的一个隐藏参数,每个方法的实现的第一个参数即为 self
super 并不是隐藏参数,它实际上只是一个”编译器标示符”,它负责告诉编译器,当调用方法时,去调用父类的方法,而不是本类中的方法。
在调用 [super class] 的时候,runtime 会去调用 objc_msgSendSuper 方法,而不是 objc_msgSend

objc_msgSendSuper 方法中,第一个参数是一个 objc_super 的结构体,这个结构体里面有两个变量,一个是接收消息的 receiver,一个是 当前类的父类 super_class

[super class] 不是调用 [super_class class]

objc_msgSendSuper 的工作原理应该是这样的:
objc_super 结构体指向的 superClass 父类的方法列表开始查找 selector,找到后以 objc->receiver 去调用父类的这个 selector。注意,最后的调用者是 objc->receiver,而不是 super_class

找到了父类 NSObject 里面的 class 方法的 IMP,传入的入参 objc_super->receiver = self

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

友情链接更多精彩内容