alloc探索

2022-08-03  本文已影响0人  ios小喽喽

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字节

上一篇下一篇

猜你喜欢

热点阅读