【发布时间】:2012-06-25 04:18:09
【问题描述】:
我在 .h 文件中有属性并在 .m 文件中合成,我知道我可以通过以下方式释放它:
self.property = nil;
但是我可以使用吗:
property = nil;
改为?
谢谢!
【问题讨论】:
标签: objective-c properties release dealloc
我在 .h 文件中有属性并在 .m 文件中合成,我知道我可以通过以下方式释放它:
self.property = nil;
但是我可以使用吗:
property = nil;
改为?
谢谢!
【问题讨论】:
标签: objective-c properties release dealloc
没有。这是因为使用retain 选项(或strong,如果您使用ARC)生成的@synthesized 方法实际上看起来像这样:
- (void)setValue:(NSString *)newValue {
[value autorelease];
value = [newValue retain];
}
因此,当您执行self.property = nil 时,旧值将被自动释放,而nil 将被保留,无论如何都不会执行任何操作。
当你只做iVar = nil 时,你永远不会释放变量之前包含的对象,所以你会泄漏。
当然,如果您使用的是 ARC(自动引用计数),则不必担心这些。编译器将为您完成工作。在这种情况下,iVar = nil 将具有与 self.iVar = nil 完全相同的效果,尽管有些人可能认为它不太清楚。
【讨论】:
strong)。不过,IMO,最好显式调用 setter。
nil 以释放它们。