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

Dan*_*iel 5 arrays iphone objective-c ios

初始化[NSArray new][NSArray array]?之间有区别吗?

array似乎是执行工作的一部分NSArray,同时new属于NSObject.

Ala*_*din 7

new = alloc + init

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

NSObject类参考

+new 在字面上实现如下:

+ (id) new
{
    return [[self alloc] init];
}
Run Code Online (Sandbox Code Playgroud)

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

所以现在的问题是:

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

它们之间的主要区别在于您是否使用ARC(自动参考计数).第一个返回一个保留和自动释放的对象.第二个返回仅保留的对象.因此,在第一种情况下,如果您希望将其保留的时间超过当前运行循环,则需要保留它.在第二种情况下,如果您不想保留它,您可能希望释放或自动释放它.

现在我们有ARC,这改变了一些事情.基本上,在ARC代码中,使用这些中的哪一个并不重要.

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

欲获得更多信息:

Objective-C中的alloc,init和new

使用alloc init而不是new

[NSMutableArray数组]与[[NSMutableArray alloc] init]之间的区别