美文网首页Runtime
iOS alloc & init 方法解析

iOS alloc & init 方法解析

作者: YY110 | 来源:发表于2021-03-10 16:52 被阅读0次

From: https://juejin.cn/post/6844904133074370573

部分源码的下载地址集合

juejin.im/post/684490…

alloc 方法流程

要解析alloc方法,首先在代码里打下断点

然后我们通过debug > Debug Workflow > Always Show Disassembly 查看其实现

viewDidLoad 方法中,[TTObject alloc]这个方法其实是调用了objc_alloc,通过对下符号断点发现objc_alloc存在libobjc.A.dyilb库中。

找到objc_alloc函数的实现,我们可以看到alloc相关的方法,其实都调用了一个callAlloc()函数

进入callAlloc()函数会执行到 __OBJC2__部分。因为canAllFast()返回值总为false,所以代码会走到判断中的else部分。重点就在于class_createInstance()函数。

class_createInstance()内部实际是调用了_class_createInstanceFromZone函数。在这个函数里我们可以看到会对obj进行开辟空间以及初始化isa的操作

在处理空间大小时,会通word_alignobj进行8字节对齐处理

初始化isa,最重要的就是对cls / shiftcls的处理。

isa处理完成并放入obj中,alloc方法算是告一段落了。我们也可以通过指针获取到对象。

init 方法流程

查看源码发现init方法什么都没有做。那么init方法为什么存在呢?就是apple留给开发者的一个处理入口,初始化对象以后对其进行自定义的修改。

执行结果

都是同一个TTObject对象

相关文章

网友评论

    本文标题:iOS alloc & init 方法解析

    本文链接:https://www.haomeiwen.com/subject/ytgwqltx.html