前言
在这篇文章从【class_getInstanceSize方法】探究iOS的内存分配策略中,我们分析了OC类的内存分配策略,但是具体的初始化过程并没有提及,这里我们来探究下OC在内存的初始化过程中都做了什么。
源码分析
我们还是先看一下整个OC类的创建流程,如下图:
其中标红的_class_createInstanceFromZone函数就是核心内容,我们直接来看看其内部实现逻辑:
|
|
从上面的源码中我们看到初始化的过程实际上就是对isa指针赋值的过程,对于不满足nonpointer的对象,isa指针直接等于类对象,而nonpointer对象的isa就比较复杂了,这里我们再来分析下nonpointer下的isa指针的数据结构,如下:
isa结构分析
|
|
可视化结构
结合上面的源码和图,nonpointer的isa指针的结构应该就比较清楚了。这个结构我们之后在分析iOS的内存管理的时候应该还会在具体分析。这里暂时先只做了解。
小结
通过以上分析,OC类的创建过程就比较清晰了,首先是通过内存对齐原则计算需要分配的内存大小,然后对类的isa指针进行初始化。到这里就可以确定一个类的对象了,那么类中superclass,cache(第一次有消息发送行为时创建内存),bits等是在何时初始化的呢,这个留在以后探究。