2011-03-10 113 views
0

我很迷惑removeFromSuperview的内存管理。子视图没有调用dealloc当超级查看(UIViewController)dealloc

这里是我的代码:

MySubView *tMySubView = [[MySubView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
tMySubView.center = self.view.center; 
tMySubView.tag = 1111; 
[self.view addSubview:tMySubView]; 
[tMySubView release]; 

“自我” 是的UIViewController。

当“自我”调用dealloc但MySubView没有调用dealloc。

我知道addSubView retainCount +1。

所以我尝试添加[tMySubView removeFromSuperview]在 “自我” 的dealloc

而且MySubView的dealloc被称为...

我应该添加[子视图removeFromSuperview]当superView dealloc?

或者superView removeFromSuperview,它会自动调用subView的removeFromSuperview ...?

我找不出来。 :(

谢谢!

回答

0

这意味着self.view不能正常释放,这将删除所有它的子视图只有在情况下,当它被释放。

检查你的loadView方法(在那里你大概初始化),如果它看起来像这样:

-(void) loadView { 
    self.view = [[UIView alloc] init]; 
} 

那么你有泄漏,必须重写它是这样的:

-(void) loadView { 
    self.view = [[[UIView alloc] init] autorelease]; 
} 

OR

-(void) loadView { 
    UIView* v = [[UIView alloc] init]; 
    self.view = v; 
    [v release]; 
} 

同时检查所有在那里你所访问self.view的地方,并确保你没有过保留它。

+0

MyViewController * tMyViewController = [[[MyViewController alloc] init] autorelease]; \t [tNavigationController pushViewController:tMyViewController animated:YES];我这样写。 – wei 2011-03-10 10:43:41

+0

不要混淆viewcontroller和它的视图。 – Max 2011-03-10 10:49:32

+0

如何创建视图?在loadView中还是在XIB中? – hennes 2011-03-10 10:53:20