OC源码分析-Runtime源码分析(五)

一 : 几种情况底层调用

减 号 方法底层

加号 方法底层

二 : 面试题

代码执行效果以及原因.
上述代码结构分析

其代码结构相当于实例对象的isa指针指向类对象 这个结构一样,所以能调用 print方法

结果分析

其内存结构由低到高地址依次排列,由于在OC中 self.name 是 略过 isa指针8个字节地址,直接访问name地址,所以在面试代码中,也可以理解为,略过obj所指向的cls地址,访问最高地址test

假如前面没有任何局部变量,只有这三行代码,其实 是super viewDidLoad 影响了 最终的结果,super viewDidLoad底层是 objc_mesSendSuper2其 第一个成员参数是一个结构体.

内存分析
所以cls移动8个字节 就找到了self ,self 就是viewController对象,所以结果是viewController

super的真正样子
super 在内存中真正的样子


实际上会调用objc_msgSendSuper2方法,第一个参数为结构体,两个成员分别为self 和 当前类,objc_msgSendSuper2会自动调用->superclass在结构体第二参数父类进行搜索.

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

相关阅读更多精彩内容

友情链接更多精彩内容