美文网首页
Objective-C new与alloc/init的区别

Objective-C new与alloc/init的区别

作者: CaptainRoy | 来源:发表于2018-06-13 23:42 被阅读0次
在OC中创建对象一般使用 [[className alloc] init] , 但是也有一个方法 [className new] , 先了解两者的区别
  • 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 alloc] init] 和 [className new] 差不多,只不过alloc分配内存的时候使用了zone(zone是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度)

因此建议用 [[className alloc] init] 会比较快,性能也比较好;并且使用 [className new]只能调用init方法,不能调用其它初始化方法

相关文章

网友评论

      本文标题:Objective-C new与alloc/init的区别

      本文链接:https://www.haomeiwen.com/subject/fwteeftx.html