iOS学习-OC对象的本质2

2020-06-12  本文已影响0人  快乐的tomato

一、OC对象的类型

1、instance 对象(实例对象)

实例对象,通过alloc出来的对象,每次alloc都会产生新的对象,分别占据着不同的内存

2、class 对象

获取类对象的方法

Class objectClass1 = [obj class];
Class objectClass2 = object_getClass(obj);

类对象都是同一个对象,在内存中有且只有一个Class对象

image.png

3、meta-class 对象

获取元类对象的方法

Class metaClass = object_getClass([NSObject class]);

在内存中有且只有一个meta-class对象

isa的指向图


image.png

从arm64开始,isa并不是直接指向上一级,而是要经过&ISA_MASK,得到上一级的地址。


image.png

4、isa和superclass的总结

接下来的部分有的绕,需要好好理解
上面我们知道了对象、类对象、和元类对象是个啥了,以及知道了每个存储了什么东西
假设有
类NSObject、 类Person、类Student、对象xiaoming
这4个玩意,其中xiaoming是Student的实例对象、Student继承Person、Person继承NSObject

处理过的流程图.png

由图可知 ,实例对象的isa指向类对象,类对象的isa指向元类对象,元类对象的isa指向基类的元类对对象
调用方法就跟着箭头的指向寻找,比如xiaoming要调用Peron的方法1,xiaoming先通过isa指针找到Student,Student通过superclass指针找到Person,再调用相对应的方法

5、class对象的结构

上一篇下一篇

猜你喜欢

热点阅读