我开始敲打我的应用程序,并且已经深入了解它运行良好,但我想我让一些东西运行有点狂野。
对于每个@property(非原子,保留),然后我创建一个@synthesize,因为我需要在dealloc方法中使用[variable release] - 这是正确的吗?
即使是IBOutlet?
答案 0 :(得分:11)
是。您通过将对象设为retain
属性来声明对象的所有权,这意味着您必须通过释放它来放弃所有权。
答案 1 :(得分:4)
此外,如果您保留IBOutlet
,则应将其释放并在nil
中将其设置为-viewDidUnload
。这使得对象在移除视图时释放其出口,特别是在响应低内存警告时。通过在该方法中将ivar设置为nil
,如果随后取消分配对象,则可以避免双重释放ivar的风险。
答案 2 :(得分:1)
是。如果您保留该财产,则您有责任将其释放。
声明的属性从根本上取代了访问器方法声明;在合成属性时,编译器仅创建任何缺少的访问器方法。没有与dealloc方法的直接交互 - 属性不会自动为您释放。
通常,您将在dealloc方法中执行此操作。
- (void)dealloc {
[property release];
[super dealloc];
}