释放后为什么设置为零?

时间:2010-12-27 12:39:57

标签: objective-c cocoa

我遇到了这种方法:

-(void) someMethod {
    NSMutableArray *anArray = [[NSMutableArray alloc] init]; 
    // Do stuff with anArray ... 
    [anArray release];
    anArray = nil;
}

是否需要将数组设置为零? 在此代码中,通过向数组发送释放消息,它将导致数组被释放。

4 个答案:

答案 0 :(得分:5)

在这种情况下,它是一个毫无意义的键击浪费,因为变量anArray立即超出范围。

在其他情况下,变量在释放其指向的对象后暂停一段时间后,这是一个好主意,因为,如果您不小心取消引用它,您将获得一个易于发现的EXC_BAD_ACCESS,如果你向它发送一条消息,它将被忽略(除了返回nil / 0)。

答案 1 :(得分:4)

正如其他人所提到的,如果您引用nil ed对象,将其设置为dealloc将有助于您的代码不会崩溃。如果您引用了dealloc,则会出现EXC_BAD_ACCESS错误,您的应用会崩溃。由于nil对象在向其发送消息时会返回nil,因此您的应用不会崩溃。

在您提供的示例中,没有必要nil它,因为它包含在方法中。但是,如果您希望在代码中的其他位置使用变量,则不希望nil输出变量,因为该值将为nil

答案 2 :(得分:0)

不是没有必要 这只是出于安全的原因(不向僵尸发送消息)
并且您可以测试您的ivar是否为零以重新分配:

[ivar release];
ivar=nil;
...
if (ivar==nil) {
  ivar = [[NSObject alloc] init];
}
[ivar setValue:@"toto"];

答案 3 :(得分:0)

将悬空指针设置为nil是没有必要但被认为是好的行为。