ObjC:我可以使用property = nil而不是self.property = nil来释放它吗?

时间:2012-06-25 04:18:10

标签: objective-c properties release dealloc

我在.h文件中有属性并在.m文件中合成,我知道我可以通过使用它来释放它:

self.property = nil;

但我可以使用:

property = nil;

代替?

谢谢!

1 个答案:

答案 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具有完全相同的效果,但有些人可能会认为它不那么明确。