新数组和数组初始化之间的区别

时间:2015-07-16 14:39:01

标签: ios objective-c iphone arrays

初始化[NSArray new][NSArray array]之间是否存在差异?

array似乎是NSArray实施的一部分,而new属于NSObject

1 个答案:

答案 0 :(得分:7)

new = alloc + init

  

此方法是alloc和init的组合。就像alloc一样   初始化新对象的isa实例变量,使其指向   到类数据结构。然后它调用init方法   完成初始化过程。

NSObject Class Reference

+new完全按字面意思实现:

+ (id) new
{
    return [[self alloc] init];
}

new不支持自定义初始值设定项(例如initWithObjects),因此alloc + initnew更明确

所以现在的问题是:

[NSArray数组] vs [[NSArray alloc] init]

  

这些之间的主要区别在于您是否使用ARC   (自动参考计数)。第一个返回一个保留和   自动释放的对象。第二个返回一个唯一的对象   保留。所以在第一种情况下,如果你愿意,你会希望保留它   想要保持它比当前的运行循环更长的时间。在里面   第二种情况,如果你没有,你会想要释放或自动释放它   想要保持它。

     

现在我们有了ARC,这改变了一些事情。基本上,在ARC代码中,它   无论你使用哪种都无关紧要。

但请记住,[NSArray array]会返回一个空的不可变数组,因此将arrayNSMutableArray一起使用会更有意义

有关详情:

alloc, init, and new in Objective-C

Use of alloc init instead of new

Difference between [NSMutableArray array] vs [[NSMutableArray alloc] init]