我正在尝试解决"收到内存警告"问题。
我的应用有2个视图控制器,当您单击第一个视图控制器上的按钮时, 细节视图控制器出现。 详细视图控制器具有UIView继承的视图,名为' topView'并且视图有许多子视图。 子视图也是UIView的继承,每个子视图都有2个UILabel。
我的问题是当你通过点击后退按钮返回第一个视图控制器, '冠捷'即使我在viewDidDisappear中放入以下代码,也不会发布。
如何释放topView的内存?
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[self.topView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
self.topView= nil;
}
我错过了什么吗? 我想我正朝着错误的方向前进,所以请给我建议。
答案 0 :(得分:1)
我不确定,但这是一个想法。当你拨打这一行时:
[[self.topView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
删除所有将self.topView
声明为超级视图的子视图。下一行:
self.topView = nil
不会删除顶部视图本身,而是删除指向它的指针。由于视图由其超级视图保留,因此该对象将保留在内存中,直到删除视图控制器并释放其视图。
答案 1 :(得分:0)
检查你的变量声明(弱,强)以确保topView对象没有保留在其他地方。 例如IBOutlet通常用弱键声明:
@property (weak, nonatomic) IBOutlet UIView * topView;