我在 .h 文件中有属性并在 .m 文件中合成,我知道我可以使用以下方法释放它:
self.property = nil;
但我可以使用:
property = nil;
反而?
谢谢!
我在 .h 文件中有属性并在 .m 文件中合成,我知道我可以使用以下方法释放它:
self.property = nil;
但我可以使用:
property = nil;
反而?
谢谢!
不,这是因为@synthesized
使用retain
选项(或者strong
,如果您使用 ARC)生成的方法实际上看起来像这样:
- (void)setValue:(NSString *)newValue {
[value autorelease];
value = [newValue retain];
}
因此,当你这样做时self.property = nil
,旧值将被自动释放,而nil
将被保留,这无论如何都不做任何事情。
当您这样做时iVar = nil
,您永远不会释放变量先前包含的对象,因此您会泄漏。
当然,如果您使用 ARC(自动引用计数),您不必担心这些。编译器将为您完成工作。在这种情况下,iVar = nil
将具有与 完全相同的效果self.iVar = nil
,尽管有些人可能认为它不太清楚。