一道值得深入思考的iOS面试题详解

2020-01-21 07:53:19刘景俊


struct objc_class : objc_object {
 // Class ISA;
 Class superclass;
 cache_t cache;  // formerly cache pointer and vtable
 class_data_bits_t bits;
}

数据来源: 苹果obj4开源代码 第1012行 用以替换 上述简述引用中的 objc_class

可以看到objc_object这个对象的首字段是isa 指向一个Class

也就是说,我们如果有一个指向Class的地址的指针,相当于这个对象就已经可以使用了,只是像他的成员变量等等的一系列值都还没有被初始化。

所以接下来用(__bridge id)obj,调用是不会产生问题的

为什么能打印出ViewController对象?

这个问题就是由两个小部分组成的

1.  name 这个属性是什么时候赋的值?

2.  ViewController 这个对象是什么时候被传入的?

首先我们需要先了解一下,一个类对象的数据是如何存储的。

这里我就按照上文一样引用很多的论证了,我们自己来探究

该上代码了: