alloc 作用
- alloc 创建对像申请内存空间-指针
alloc init 和 new
- alloc 是开辟内存 生成指针
- init 是类的构造方法 是工厂模式的设计
- new == callAlloc(self,false)init == [[obj alloc]init]
alloc 如何创建对象
实质上就是alloc的流程 如下:
graph TD
A[alloc]-->B[objc_alloc]
B-->C[callAlloc]
C-->D[_objc_rootAllocWithZone]
D-->E[_class_createInstanceFromZone]
E-->F[instanceSize 计算需要申请的内存大小]
F-->G[calloc 申请内存大小]
G-->H[initIsa 将申请的内存地址指针和isa指针即我们的类绑定起来]
graph TD
A[instanceSize]-->B{如何计算内存大小}
B-->C[fastInstanceSize ]
C-->D[align16]
// 计算所需要的内存大小
size_t fastInstanceSize(size_t extra) const
{
ASSERT(hasFastInstanceSize(extra));
if (__builtin_constant_p(extra) && extra == 0) {
return _flags & FAST_CACHE_ALLOC_MASK16;
} else {
size_t size = _flags & FAST_CACHE_ALLOC_MASK;
// remove the FAST_CACHE_ALLOC_DELTA16 that was added
// by setFastInstanceSize
return align16(size + extra - FAST_CACHE_ALLOC_DELTA16);
}
}
// 进行内存对齐
static inline size_t align16(size_t x) {
return (x + size_t(15)) & ~size_t(15);
}
寄存器
- 存储指针
- x0==是第一个参数的传递者 也是返回值的存储地方