ios - 删除 subview (ARC)后内存未释放

标签 ios memory-leaks automatic-ref-counting

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

我的应用程序有 2 个 View Controller ,当您单击第一个 View Controller 上的按钮时, 细节 View Controller 出现。 详细 View Controller 有一个继承自 UIView 的 View ,称为“topView”,该 View 有许多 subview 。 subview 也继承了 UIView,每个 subview 有 2 个 UILabel。

我的问题是,当您通过单击后退按钮返回到第一个 View Controller 时, 即使我将以下代码放入 viewDidDisappear,“topView”也不会被释放。

如何释放topView的内存?

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

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

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

最佳答案

我不确定,但这里有一个想法。当您调用此线路时:

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

它删除所有将 self.topView 声明为 super View 的 subview 。下一行:

self.topView = nil

不会删除顶 View 本身,而是 nil 是指向它的指针。由于 View 由其 super View 保留,因此该对象将保留在内存中,直到 View Controller 被删除并释放其 View 为止。

关于ios - 删除 subview (ARC)后内存未释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24971354/

相关文章:

ios - GCD 的核心数据

ios - 在 iOS7 中更改安全 UITextField 奇怪行为中的 UIFont

c - 没有内存泄漏

objective-c - 将 WEAK 设置为非 @property 变量

iphone - 分配rootviewcontroller时发生内存泄漏

ios - ARC Objective-C 中的输出参数

ios - 从用户位置查找数组中最接近的经度和纬度,并根据从一个纬度到另一个纬度的最短距离对数组进行排序

IOS 下拉与 UITextField 和 UITableView

Objective-C ARC 和 longjmp

memory-leaks - 这个 D 示例中是否存在内存泄漏?