删除所有子视图后,内存没有回到开头

时间:2018-05-23 07:49:17

标签: ios objective-c memory

当我创建一个新项目并运行时,所有代码都是:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

内存为53M:

enter image description here

然后我改变了代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    for (int i = 0; i < 1000; i ++) {
        UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
        tableView.backgroundColor = [UIColor redColor];
        tableView.userInteractionEnabled = NO;
        [self.view addSubview:tableView];
    }
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    for (__strong UITableView *tableView in self.view.subviews) {
        [tableView removeFromSuperview];
        tableView = nil;
    }
}

记忆倾向:

enter image description here

在录制视图之前,内存为117M,在录制视图后,删除了所有子视图,内存下降到91M。

为什么91M不是53M?

注意:我使用iPhone X模拟器。

1 个答案:

答案 0 :(得分:0)

启动内存探查器并查看其间创建的对象。 UITableView是一个非常复杂的对象,因此可能会缓存或仍然存在各种类型的东西,但无法确切知道。