当superview(UIViewController)dealloc时,subview没有调用dealloc

时间:2011-03-10 10:25:15

标签: iphone objective-c memory-management dealloc

我对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 ......?

我无法理解。 :(

谢谢!

1 个答案:

答案 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的所有地点,并确保您没有过度保留它。