似乎有不同的实例化NSArrays的方法(NSDictionary和其他一些方法相同)。
我知道:
[NSArray array]
[NSArray new]
@[]
[[NSArray alloc] init]
出于可读性原因,我通常坚持使用[NSArray array]
,但所有这些之间的区别是什么,他们是否真的都这样做?
答案 0 :(得分:17)
对于所有这些结果都是一样的,你得到一个新的空的不可变数组。不同的方法有不同的内存管理含义。使用ARC这最终没有区别,但在ARC之前,您必须使用正确的版本或发送适当的保留,释放或自动释放消息。
[NSArray new]
和[[NSArray alloc] init]
返回一个+1保留计数的数组。在ARC之前,您必须释放或自动释放该阵列,否则您将泄漏内存。
[NSArray array]
和@[]
返回已经自动释放的数组(保留计数0)。如果你希望它在没有ARC的情况下坚持下去,你必须手动保留它,否则当弹出当前自动释放池时它将被解除分配。
答案 1 :(得分:7)
[NSArray array]
:创建并返回一个空数组
[NSArray new]
:alloc
,init
并返回NSArray
对象
@[]
:与1相同。
[[NSArray alloc] init]
:与2相同。
[NSArray array]
和[[NSArray alloc] init]
之间的区别是,如果有非ARC:
[NSArray array]
是一个自动释放对象。如果你想保留它,你必须致电retain
。例如,当您return
数组时。
[[NSArray alloc] init]
是一个保留对象。因此,如果您想保留它,则无需再致电retain
。
使用ARC,它们是相同的。