1

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

self.property = nil;

但我可以使用:

property = nil;

反而?

谢谢!

4

1 回答 1

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,尽管有些人可能认为它不太清楚。

于 2012-06-25T04:22:01.210 回答