将nil分配给初始化对象的变量会释放它吗?

时间:2012-04-19 07:46:58

标签: objective-c ios memory-management ios5

我对此有类似的疑问:What is the difference between setting object = nil and [object release] VS [object release] and object = nil?

NSMutableArray *myExampleArray = [[NSMutableArray alloc] init];
myExampleArray = nil;

我使用iOS 5.0 自动引用计数,所以实际上我不会释放任何对象。所以,如果我将它指定为nil,它是否等于[myExampleArray release]?

我知道我以后不能使用myExampleArray而不重新初始化它。接下来的问题。 清除此NSArray的最佳方式是什么?

2 个答案:

答案 0 :(得分:7)

是的,在ARC环境中,您永远不会调用release。因此,为变量分配nil将释放对象。

在非ARC环境中,您可以自行执行发布,因此对象会被破坏。但变量仍然指向旧的对象地址。但是没有任何对象,所以如果稍后使用该变量,可能会发生崩溃(EXC_BAD_ACCESS)。如果你也给它指定了nil,那就不会发生。因为变量不再指向旧的对象地址。

你的另一个问题: 如果稍后再需要该数组,可以在NSMutableArray上调用removeAllobjects来删除所有添加的对象,就像Ankit Gupta已经说过的那样。这将导致一个空数组,它仍处于活动状态,因此您可以重复使用它。

答案 1 :(得分:3)

不要将Nil用于您的对象
试试这一行:

[myExampleArray removeAllobjects];