oc对象探索 alloc&init

2021-06-19  本文已影响0人  来根黄鹤楼啊

初步探索 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

上一篇 下一篇

猜你喜欢

热点阅读