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



我在 .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完全相同的效果,尽管有些人可能认为它不太清楚。

最新更新