2

我有大量的视图/视图控制器层次结构。
在主控制器中,我有以下代码,其中 aViewController 是 MyClass 的成员:

@implementation MyClass

...

- (void) viewDidLoad
{
    [self.view addSubview:aViewController_.view];
    [aViewController_ setDataSource:self];
    [aViewController_ setDelegate:self];
}

- (void)dealloc 
{
    //[aViewController_.view removeFromSuperview]; // All ok when this is added
    [aViewController_ release];
    [super dealloc];
}

...

@end

运行它时,我看到它aViewController永远不会被释放 - 保留计数最后仍然是 1。
如果我添加[aViewController_.view removeFromSuperview];到 dealloc 中,一切正常。

为什么是这样?不[super dealloc]应该关心视图的释放吗?在控制器之后释放视图是否重要?

我试图用一个简单的测试应用程序重现,但没有任何运气。

4

1 回答 1

3

这是将您的视图添加为 aViewController_.view 的子视图。

[self.view addSubview:aViewController_.view];

aViewController_.view保留视图,因此当您释放主控制器时,视图不会被释放,这是正确的。

在解除分配“主控制器”之前,您需要从超级视图中删除视图。

当你释放它时,“主控制器”将消失,但超级视图仍然保留子视图。

aViewController_您可以在释放拥有该视图的控制器之前完成视图的某处执行此操作。

如果没有看到你所有的代码,很难说。

请记住,当您将视图添加到另一个视图时,超级视图会保留该视图,直到它被删除。

于 2011-05-10T04:12:12.253 回答