您的位置:首页 > 移动开发 > IOS开发

new和alloc

2016-07-17 19:59 363 查看
new和alloc实现的源码如下:

//new的源码:
+ new
{
id newObject = (*_alloc)((Class)self, 0);
Class metaClass = self->isa;
if (class_getVersion(metaClass) > 1)
return [newObject init];
else
return newObject;
}

//alloc/init的源码 :
+ alloc
{
return (*_zoneAlloc)((Class)self, 0, malloc_default_zone());
}
- init
{
return self;
}


通过源码我们发现,[className new]基本等同于[[className alloc] init],都是分配内存并完成初始化。

但是,区别如下:

new 是把分配内存和初始化的工作一起完成了,先分配内存,然后调用默认的init方法来初始化。

alloc将分配内存和初始化这两个工作分开了,所以它的初始化方法除了默认的init方法之外,还可以使用initXXX方法。同时,init分配内存的时候使用了zone,可以把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度。

new是一种比较老式的用法,现在一般情况下都使用alloc。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios oc