发布Vs nil - 最佳实践

时间:2010-11-18 23:40:51

标签: iphone objective-c cocoa-touch

当我们将内存分配给类变量时,我们应该释放它还是在dealloc方法中将其设置为nil?什么是最佳做法?

1 个答案:

答案 0 :(得分:11)

最佳做法:

[foo release]; // ensures that memory is released
foo = nil; // ensures that there is no dangling pointer to released memory

其他说明:

当您指定声明为保留的属性时,

// in your .h
@property (retain) MyObject *foo;

// in your .m
self.foo = bar; // bar is retained; whatever foo previously pointed at is released

它将释放它之前指向的内容并保留指定的新对象。

所以,你可以使用:

self.foo = nil;

它将释放foo指向的任何内容。 但是,如果您的属性未声明具有保留存储语义,则不会隐式释放foo指向的内容。此外,正如瑞恩所指出的那样,一个财产可以被覆盖以产生副作用。因此,最好遵循始终使用的模式:

[foo release];

为了确保您没有指向已释放内存的悬空指针,您可以通过以下方式进行操作:

foo = nil;

如果您没有使用具有保留语义的属性,则需要来释放存储在变量中的内容:

[foo release];

编辑:另见另一个解释此问题的答案:

iPhone - dealloc - Release vs. nil