子视图没有调用dealloc当超级查看(UIViewController)dealloc
问题描述:
我很迷惑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 ...?
我找不出来。 :(
谢谢!
答
这意味着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的地方,并确保你没有过保留它。
MyViewController * tMyViewController = [[[MyViewController alloc] init] autorelease]; \t [tNavigationController pushViewController:tMyViewController animated:YES];我这样写。 – wei 2011-03-10 10:43:41
不要混淆viewcontroller和它的视图。 – Max 2011-03-10 10:49:32
如何创建视图?在loadView中还是在XIB中? – hennes 2011-03-10 10:53:20