我对removeFromSuperview的内存管理感到困惑。
这是我的代码:
MySubView *tMySubView = [[MySubView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
tMySubView.center = self.view.center;
tMySubView.tag = 1111;
[self.view addSubview:tMySubView];
[tMySubView release];
“self”是UIViewController。
当“self”调用dealloc但MySubView没有调用dealloc时。
我知道addSubView retainCount +1。
所以我尝试在“self”dealloc中添加[tMySubView removeFromSuperview]
MySubView dealloc被称为......
我应该添加[subView removeFromSuperview];什么时候superView dealloc?
或者superView removeFromSuperview,它会自动调用subView的removeFromSuperview ......?
我无法理解。 :(
谢谢!
答案 0 :(得分: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的所有地点,并确保您没有过度保留它。