ios底层源码之 alloc&init流程

200 阅读1分钟

在我们开发过程中,经常用的alloc init,那他们具体做了些什么工作了呢?

下面我们先看看alloc的流程图

未命名文件 (2).png
看着比较复杂,其实主要就做了两件事

  • 申请内存空间
  • 绑定isa

init 又做了什么工作呢

+ (id)init {
    return (id)self;
}

- (id)init {
    return _objc_rootInit(self);
}
id _objc_rootInit(id obj)
{
    // In practice, it will be hard to rely on this function.
    // Many classes do not properly chain -init calls.
    return obj;
}

从源码里,我们可以看出,init,其实什么也没有做,那为什么还要设计这样的接口呢? 从设计模式上来讲,这样做是为了让子类统一在这里初始化一些属性,也即是工厂模式的运用。

总结

ios底层alloc,主要做了申请内存和绑定isa,而init直接返回对象本身,具体的alloc申请的时候,申请内存的大小是多少呢,要绑定的isa又是什么,下篇文章,继续学习