+ new
{
id newObject = (*_alloc)((Class)self, 0);
Class metaClass = self->isa;
if (class_getVersion(metaClass) > 1)
return [newObject init];
else
return newObject;
}
+ alloc
{
return (*_zoneAlloc)((Class)self, 0, malloc_default_zone());
}
- init
{
return self;
}
上述是apple文档中new和alloc/init方法的具体实现。
个人笔记:
alloc:分配内存;init:初始化;new:分配内存,并隐性地初始化
new大体等同与alloc+init;只是alloc时使用了Zone;
new是老版使用的方法,后来apple引进allocWithZone:方法,apple为了方便,又重新封装成了alloc方法;
注意:
new是很方便,但初始化只能使用init,比如要使用自定义的initWithXXX就会报错;
alloc则可以使用自定义的初始化方法;