2020-09-05 oc对象alloc的作用
2020-09-06 本文已影响0人
蓝胖子的梦
众所周知,alloc是分配一个对象的内存空间。
我们创建代码一个对象Person*p1 = [[Person alloc]init];通过objc781源码断点窥探alloc流程,alloc会通过一系列函数调用。如下图
1、调用instanceSize,计算对象需要的内存空间大小,此内存空间大小在苹果64位系统下,会采用16字节对齐方式,即算法:x+size_t(15)&~size_t(15),算出来的内存大小永远是16字节的倍数;x值受对象属性的影响,即对象属性越多,x值越大,内存需要就越大。ps:属性的类型也会影响x值,NString、NSInteger占8字节,int占4字节,short int 占2字节
2、调用calloc,向系统开辟内存空间,并返回地址指针。
3、initInstanceIsa,将地址指针关联相应的类。
alloc流程图
NSObject*objc1 = [[NSObjectalloc]init];
NSObject 只有一个isa指针,只要需要的内存空间是8字节,16字节对齐后实际返回的内存空间为16字节