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