我在.h文件中有属性并在.m文件中合成,我知道我可以通过使用它来释放它:
self.property = nil;
但我可以使用:
property = nil;
代替?
谢谢!
答案 0 :(得分:4)
没有。这是因为使用@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
具有完全相同的效果,但有些人可能会认为它不那么明确。