初步探索 alloc 和 init?
要知道alloc 和 init 都干了什么事情 我們從內(nèi)存地址和指針地址來分析?
打印之后會發(fā)現(xiàn)
alloc
內(nèi)存地址一樣 而指針地址不一樣 那么我們探索問題的來了 我們要確定?alloc 和 init?作用 包括 是一個什么樣的流程
流程如下
alloc->_objc_rootAlloc->callAlloc->_objc_rootAllocWithZone->_class_createInstanceFromZone
我們通過在官網(wǎng)下載源碼進行分析
在callAlloc里面有
slowpath & fastpath
可以看到fastpath里面的判斷?hasCustomAWZ() 方法表示判斷一個類是否有自定義的 allocWithZone 實現(xiàn) 如果沒有走_objc_rootAllocWithZone
我們點擊進來看見_class_createInstanceFromZone
再點進去
核心:instanceSize() 、calloc()腊敲、initInstanceIsa()
instanceSize()?
cache.fastInstanceSize() :快速計算內(nèi)存空間?
這里面有一個字節(jié)對齊的概念 :概念
如果不是判斷成功 進行size計算?
calloc():開辟內(nèi)存空間
initInstanceIsa():將isa和類進行關(guān)聯(lián)
init
通過源碼 init實際返回self