我遇到了这种方法:
-(void) someMethod {
NSMutableArray *anArray = [[NSMutableArray alloc] init];
// Do stuff with anArray ...
[anArray release];
anArray = nil;
}
是否需要将数组设置为零? 在此代码中,通过向数组发送释放消息,它将导致数组被释放。
答案 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是没有必要但被认为是好的行为。