alloc流程:
系统级别就把NSObject的初始化做了,所以NSObject的alloc的调用关系是:
alloc --> objc_alloc --> calloc --> _objc_rootAllocWithZone
自定义对象alloc,都需要 重写了NSObject中的alloc方法:
alloc -> _objc_rootAlloc -> callAlloc -> _objc_rootAllocWithZone -> _class_createInstanceFromZone,
在_class_createInstanceFromZone中会进行instanceSize、calloc,initInstanceIsa
instanceSize:算出要要开辟多少内存
图(1)calloc:开辟内存,返回地址指针。注:是在栈内开辟内存
图(2)initInstanceIsa:把传过来的cls类绑定到指针地址obj
图(3) 图(4)Init 做了什么?
图(5)init是一个构造方法,主要是提供给用户入口的,id 是可以强转为需要的类型
new:等同于alloc + init,从下图可以直接看出来,但是很快捷
图(6)注:不建议使用new,因为我从写构造函数的某些数据时,new中的init不会走
instanceSize影响的因素:属性
指针大小是8字节
网友评论