删除子视图(ARC)后未释放内存

时间:2014-07-26 13:10:54

标签: ios memory-leaks automatic-ref-counting

我正在尝试解决"收到内存警告"问题。

我的应用有2个视图控制器,当您单击第一个视图控制器上的按钮时, 细节视图控制器出现。 详细视图控制器具有UIView继承的视图,名为' topView'并且视图有许多子视图。 子视图也是UIView的继承,每个子视图都有2个UILabel。

我的问题是当你通过点击后退按钮返回第一个视图控制器, '冠捷'即使我在viewDidDisappear中放入以下代码,也不会发布。

如何释放topView的内存?

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];

    [[self.topView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
    self.topView= nil;    
}

我错过了什么吗? 我想我正朝着错误的方向前进,所以请给我建议。

2 个答案:

答案 0 :(得分:1)

我不确定,但这是一个想法。当你拨打这一行时:

[[self.topView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

删除所有将self.topView声明为超级视图的子视图。下一行:

self.topView = nil

不会删除顶部视图本身,而是删除指向它的指针。由于视图由其超级视图保留,因此该对象将保留在内存中,直到删除视图控制器并释放其视图。

答案 1 :(得分:0)

检查你的变量声明(弱,强)以确保topView对象没有保留在其他地方。 例如IBOutlet通常用键声明:

@property (weak, nonatomic) IBOutlet UIView * topView;