NSArray.array / .new / @ / alloc-init之间的区别

似乎有不同的方法实例化NSArrays(NSDictionary和其他一些)。

我知道:

  1. [NSArray array]
  2. [NSArray new]
  3. @[]
  4. [[NSArray alloc] init]

出于可读性的原因,我通常坚持使用[NSArray array] ,但所有这些之间的区别是什么,它们是否都一样?

结果是相同的,你会得到一个新的空的不可变数组。 不同的方法虽然有不同的内存pipe理含义。 使用ARC这最终没有什么区别,但在ARC之前,你必须使用正确的版本或发送适当的保留,释放或自动释放消息。

[NSArray new][[NSArray alloc] init]返回一个+1保留计数的数组。 ARC之前,你将不得不释放或autorelease该数组或泄漏内存。

[NSArray array]@[]返回一个已经autoreleased数组(保留计数0)。 如果你想在没有ARC的情况下坚持下去,你必须手动保留它,否则在当前autorelease池被popup时它会被释放。

  1. [NSArray array] :创build并返回一个空数组

  2. [NSArray new]allocinit并返回一个NSArray对象

  3. @[] :与1相同。

  4. [[NSArray alloc] init] :与2相同。

不同的[NSArray array][[NSArray alloc] init]是否有非ARC:

  • [NSArray array]是一个autorelease对象。 如果你想保留它,你必须调用retain 。 例如,当你return一个数组。

  • [[NSArray alloc] init]是一个保留的对象。 所以如果你想retain话,你不需要更多的保留。

用ARC,他们是一样的。