初步探索 alloc 和 init
要知道alloc 和 init 都干了什么事情 我们从内存地址和指针地址来分析
打印之后会发现
alloc
内存地址一样 而指针地址不一样 那么我们探索问题的来了 我们要确定 alloc 和 init 作用 包括 是一个什么样的流程
流程如下
alloc->_objc_rootAlloc->callAlloc->_objc_rootAllocWithZone->_class_createInstanceFromZone
我们通过在官网下载源码进行分析
在callAlloc里面有
slowpath & fastpath
借鉴大佬博客可以看到fastpath里面的判断 hasCustomAWZ() 方法表示判断一个类是否有自定义的 allocWithZone 实现 如果没有走_objc_rootAllocWithZone
我们点击进来看见_class_createInstanceFromZone
再点进去
核心:instanceSize() 、calloc()、initInstanceIsa()
instanceSize()
cache.fastInstanceSize() :快速计算内存空间
这里面有一个字节对齐的概念 :概念
如果不是判断成功 进行size计算
calloc():开辟内存空间
initInstanceIsa():将isa和类进行关联
init
通过源码 init实际返回self
网友评论