当我将它们作为保留它们的实例变量引用时,我是否应该在viewDidUnload中发布我的UIView子视图?我以编程方式构建GUI。我应该这样做吗?由于uiview和ivars都保留,因此当视图接收时,对象将具有2个保留计数。内存警告,然后UIView将释放子视图,但他们仍然有+1保留计数所以我必须setself.myIvar = nil;在viewDidUnload?
中感谢您的时间。
答案 0 :(得分:1)
您实际上可以在viewDidUnload中释放所有保留的子视图。但我曾经以另一种方式做到这一点:
-(void) viewDidLoad {
someInstanceView1 = [[UIView alloc] init];
[self.view addSubview: someInstanceView1];
[someInstanceView1 release];
someInstanceView2 = [[UIView alloc] init];
[self.view addSubview: someInstanceView2];
[someInstanceView2 release];
//etc...
//you have a references to someInstanceView1 and someInstanceView2 with retained counts 1
}
在这种情况下,即使出现内存警告,视图控制器也会删除其所有视图子视图。然后再次调用viewDidLoad。所以没有泄漏,你根本不需要关心释放那些ivars,因为唯一的所有者(它有对视图的强引用)是视图控制器的视图,它会自动释放它们。