当我们将内存分配给类变量时,我们应该释放它还是在dealloc方法中将其设置为nil?什么是最佳做法?
答案 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];
编辑:另见另一个解释此问题的答案: