OC中类和对象的实质

objc_object源码

objc_class源码
继承objc_object,说明Class本身也是一种对象。objc_class中的isa指向的则是Class对象的Class,也就是Meta_class.

1)metaClass是能找得到类方法的metaClass是找不到对象方法的;在前面提到methodLists里面,如果是父类的类方法,就会通过metaClass的superClass去找到父metaClass,再从中找相应的类方法;

2)Class是可以找到对象方法的,Class是找不到类方法的。在前面提到methodLists里面,如果是父类的对象方法,就会通过Class的superClass去到找到父类的Class,再从中找到相应的对象方法;

其实,这正是体现了面向对象三大特性之一:继承性。https://blog.csdn.net/u014686721/java/article/details/82189342
https://juejin.im/post/5ac81c75518825556534c0af
1.一个NSObject对象占用多少内存?
只有一个isa指针,在64位的cpu中占8个字节,在32位中,指针占4个字节。

2. 一个OC对象在内存中是如何布局的。 
isa指针这个变量的地址就是结构体的地址。也就是NSObject对象的地址。
自定义类的内部实现:如果一个自定义类继承自NSObject。


3.在64位环境下,多层继承关系
这道面试题的实质是想问一个Person对象,一个Student对象分别占用多少内存空间?主要考察内存对齐的问题。

还不是整体补齐。还需要是


4.OC的类信息存放在哪里。 面试题:对象的isa指针指向哪里。
实例对象:指向的是类结构体存放的地方。找实例方法,实例变量(但是每个实例的地址不一样,isa就是这个实例的地址,类结构存放地址只有一份,如果解释实例不同呢?)每一个类在内存中有且只有一个class对象,也就是说无论多少个实例对象其类对象的内存地址都是一样的,但是每个实例对象的地址肯定不一样啦。实例对象的isa指针 经过&运算之后得到的是类对象地址。
类对象:指向是metaClass。找类方法,类属性
meta对象:指向基类的isa,基类的isa指向自己。

有两条路径可以查找

你可能感兴趣的:(OC中类和对象的实质)