iOS alloc & init 方法解析

部分源码的下载地址集合

juejin.im/post/5e9d9a…sass

alloc 方法流程

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

而后咱们经过debug > Debug Workflow > Always Show Disassembly 查看其实现 函数

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

找到objc_alloc函数的实现,咱们能够看到alloc相关的方法,其实都调用了一个callAlloc()函数 debug

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

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

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

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

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

init 方法流程

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

执行结果

都是同一个TTObject对象

相关文章
相关标签/搜索