iOS DevelopmentiOS Developer

iOS- alloc init new

2018-01-18  本文已影响65人  linbj
开发中天天都需要创建对象,可是初始化的时候为什么需要alloc init呢?alloc,init 对应又做了什么呢?

alloc:分配了一个内存给对象,让它不释放,并且把地址返回给指针。
init:初始化。

alloc分配了一坨 内存给对象之后并不能使用,因为还没有正确的初始化。

image.png

接下来查看方法源码

// malloc_default_zone 创建了一个默认大小的内存空间,然后返回_zoneAlloc
+ (id)alloc
{
    return (*_zoneAlloc)((Class)self, 0, malloc_default_zone()); 
}

// 初始化
- (id)init
{
    return self;
}
为什么不用new方法创建对象呢?
image.png

给对象分配一个实例,并且给它发送一个init,然后返回一个初始化好了的对象。

+ (id)new
{
    id newObject = (*_alloc)((Class)self, 0);
    Class metaClass = self->ISA();
    if (class_getVersion(metaClass) > 1)
        return [newObject init];
    else
        return newObject;
}

new方法结合了alloc init方法,alloc初始化对象之后将isa指针指向类的数据结构,然后用init初始化。

new方法和alloc init 方法的区别( IOS基础——alloc、init和new方法区别
):

上一篇 下一篇

猜你喜欢

热点阅读