NSArray.array/.new /@[]/alloc-init 之间的区别
Difference between NSArray.array/.new /@[]/alloc-init
似乎有不同的实例化 NSArray 的方法(与 NSDictionary 和其他一些方法相同)。
我知道:
[NSArray array]
[NSArray new]
@[]
[[NSArray alloc] init]
出于可读性原因,我通常坚持使用 [NSArray array]
,但它们之间有什么区别,它们真的都做同样的事情吗?
[NSArray array]
: 创建并return一个空数组
[NSArray new]
: alloc
, init
和 return 一个 NSArray
对象
@[]
: 同 1.
[[NSArray alloc] init]
: 同 2.
[NSArray array]
和 [[NSArray alloc] init]
的区别在于是否存在非 ARC:
[NSArray array]
是一个自动释放对象。如果你想保留它,你必须调用 retain
。例如,当你 return
一个数组时。
[[NSArray alloc] init]
是一个保留对象。所以如果你想保留它,你不必再调用 retain
。
对于 ARC,它们是相同的。
它们的结果都是一样的,你得到一个新的空 immutable 数组。不过,这些方法具有不同的内存管理含义。 ARC
最终没有区别,但在 ARC 之前,您必须使用正确的版本或发送适当的保留、释放或自动释放消息。
[NSArray new]
, [[NSArray alloc] init]
return 保留计数为 1 的数组。在 ARC 之前,您必须释放或自动释放该数组,否则会泄漏内存.
[NSArray array]
, @[]
return 一个已经自动释放的数组(保留计数为 0)。如果你想让它在没有 ARC 的情况下继续存在,你必须手动保留它,否则它会在当前自动释放池弹出时被释放。
似乎有不同的实例化 NSArray 的方法(与 NSDictionary 和其他一些方法相同)。
我知道:
[NSArray array]
[NSArray new]
@[]
[[NSArray alloc] init]
出于可读性原因,我通常坚持使用 [NSArray array]
,但它们之间有什么区别,它们真的都做同样的事情吗?
[NSArray array]
: 创建并return一个空数组[NSArray new]
:alloc
,init
和 return 一个NSArray
对象@[]
: 同 1.[[NSArray alloc] init]
: 同 2.
[NSArray array]
和 [[NSArray alloc] init]
的区别在于是否存在非 ARC:
[NSArray array]
是一个自动释放对象。如果你想保留它,你必须调用retain
。例如,当你return
一个数组时。[[NSArray alloc] init]
是一个保留对象。所以如果你想保留它,你不必再调用retain
。
对于 ARC,它们是相同的。
它们的结果都是一样的,你得到一个新的空 immutable 数组。不过,这些方法具有不同的内存管理含义。 ARC
最终没有区别,但在 ARC 之前,您必须使用正确的版本或发送适当的保留、释放或自动释放消息。
[NSArray new]
,[[NSArray alloc] init]
return 保留计数为 1 的数组。在 ARC 之前,您必须释放或自动释放该数组,否则会泄漏内存.[NSArray array]
,@[]
return 一个已经自动释放的数组(保留计数为 0)。如果你想让它在没有 ARC 的情况下继续存在,你必须手动保留它,否则它会在当前自动释放池弹出时被释放。