我应该释放对象:在方法dealloc或viewDidUnload?
由于
答案 0 :(得分:2)
您的简短回答问题:dealloc()
对于你的问题,答案是一个冗长而复杂的答案:
答案 1 :(得分:2)
正确的方法是释放它们并在这两种方法中将它们设置为nil。
最后,您需要在两种方法中将变量设置为nil,以便第二次无法调用它们的释放。
答案 2 :(得分:1)
loadView
和/或viewDidLoad
中分配和/或保留的任何对象都应在viewDidUnload
中发布。释放您在viewDidLoad
中分配的任何内容都很容易理解,如果您使用NIB,loadView
会更难。任何定义为IBOutlet
的属性的retain
都将隐式保留为loadView
的一部分。
如果视图具有例如UITextField
的子视图,并且您将此视图连接到定义为的属性:
@property(nonatomic, retain) IBOutlet UITextField* nameField;
然后,从NIB加载时的实际文本字段的保留计数为+2。 +1因为它的父视图而+1,因为你连接它的属性也是如此。因此,在释放视图控制器或再次加载NIB之前,不会释放内存。
不幸的是,在取消分配视图控制器时,不会调用viewDidUnload
。所以你必须在这里明确地释放你所有的`IBOutlets。我使用这种模式是为了不忘记发布任何东西:
-(void)releaseOutlets {
// Set all outlets to nil
}
-(void)viewDidUnload {
[self releaseOutlets];
[super viewDidUnload];
}
-(void)dealloc {
[self releaseOutlets];
// Release anything else.
[super dealloc];
}
答案 3 :(得分:0)
以这种方式释放,如果父对象被释放,子对象也将被释放。