我应该在viewDidUnload中发布UIView的子视图吗?

时间:2011-02-22 18:39:13

标签: iphone

当我将它们作为保留它们的实例变量引用时,我是否应该在viewDidUnload中发布我的UIView子视图?我以编程方式构建GUI。我应该这样做吗?由于uiview和ivars都保留,因此当视图接收时,对象将具有2个保留计数。内存警告,然后UIView将释放子视图,但他们仍然有+1保留计数所以我必须setself.myIvar = nil;在viewDidUnload?

感谢您的时间。

1 个答案:

答案 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,因为唯一的所有者(它有对视图的强引用)是视图控制器的视图,它会自动释放它们。