发布后将指针设置为nil?

fuz*_*oat 15 objective-c

释放对象后最好将指针设置为nil?多数民众赞成我一直在做的事情,只是想问一下它是否必要,良好的做法或过度杀伤?

- (void)dealloc{
    [planetName release]; // NSString instance variable
    [super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)

.

- (void)dealloc{
    [planetName release]; // NSString instance variable
    planetName = nil;
    [super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)

干杯 - 加里 -

Wim*_*ink 20

取决于保存指针的变量的范围.如果它们继续存在于范围内,我总是将指针设置为nil,以防我在其他地方再次调用变量.否则,我可能会访问包含现在已释放的对象的内存位置.

但是如果变量超出范围,那么它也不会被使用,因此为它分配nil有点矫枉过正.尽管如此,仅仅为了防止其他人决定将代码添加到您的代码并且在其范围内再次使用该变量但在其被释放之后,分配nil是一个好习惯.


And*_*res 6

通常在使用C/C++进行编程时,我将其设置为null.为什么?因为即使你释放被指向的内存,指针仍然保存释放的内存的地址.它可能会导致严重的访问冲突问题,如下所示:

if(myPointer != null)
{
   doSomething(myPointer);
}
Run Code Online (Sandbox Code Playgroud)

如果您将指针设置为null,则永远不会发生这种情况