0

我对 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];

“自我”是 UIViewController。

当“self”调用 dealloc 但 MySubView 没有调用 dealloc。

我知道 addSubView 保留计数 +1。

所以我尝试在“self” dealloc 中添加 [tMySubView removeFromSuperview]

并且调用了 MySubView dealloc...

我应该添加 [subView removeFromSuperview]; superView什么时候dealloc?

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

我想不通。:(

谢谢!

4

1 回答 1

0

这意味着 self.view 没有正确释放。只有在释放它的情况下,它才会删除它的所有子视图。

检查你的 loadView 方法(你可能在哪里初始化它)。如果它看起来像这样:

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

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

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

或者

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

还要检查您访问 self.view 的所有位置,并确保您没有过度保留它。

于 2011-03-10T10:32:47.670 回答