美文网首页
OC源码分析-Runtime源码分析(五)

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

作者: TianTianBaby223 | 来源:发表于2019-02-07 14:30 被阅读3次

一 : 几种情况底层调用

减 号 方法底层

加号 方法底层

二 : 面试题

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

其代码结构相当于实例对象的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在结构体第二参数父类进行搜索.

相关文章

网友评论

      本文标题:OC源码分析-Runtime源码分析(五)

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