释放所有具有@property retain @synthesize的内容?

5
我已经开始开发我的应用程序,进展顺利,但我认为有些东西可能有点失控。
对于每个 @property (nonatomic, retain),我都需要在 dealloc 方法中创建一个 [variable release],然后再为其创建一个 @synthesize - 这样做正确吗?
即使它是 IBOutlet 也需要这样做吗?

谢谢大家,我想我终于明白了。 - Slee
3个回答

11

是的。通过将对象设置为 retain 属性,您声明了对该对象的所有权,这意味着您必须通过释放它来放弃所有权。


2
参见:https://dev59.com/RXI95IYBdhLWcg3wtwRe - e.James
谢谢,这是我的第一个程序,但我有点偏离轨道 - 有很多属性要释放 :) - Slee
你可能想要查看 Accessorizer...它会让你的生活更轻松。http://www.kevincallahan.org/software/accessorizer.html - joshpaul
作为一个相关的评论,为什么现在我看到人们将属性设置为nil而不是release?self.property = nil; - Slee
@Slee 这是一种常见的方式,让合成方法为您执行释放操作,但它有一些微妙的陷阱和注意事项。在网站上搜索“在dealloc中使用访问器”(或类似内容)。 - Dave DeLong

4
此外,如果您有一个保留的IBOutlet,您应该在-viewDidUnload中释放它并将其设置为nil。这样可以让对象在视图被移除时释放其插座,特别是响应低内存警告时。通过在该方法中将实例变量设置为nil,如果对象随后被释放,您就可以避免重复释放实例变量的风险。

1

是的。如果您保留该属性,则需要负责释放它。

声明属性基本上取代了访问器方法声明;当您合成一个属性时,编译器仅会创建任何缺失的访问器方法。没有直接与dealloc方法交互-属性不会自动释放。

已声明的属性

通常情况下,您将在dealloc方法中执行此操作。

- (void)dealloc {
    [property release];
    [super dealloc];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接