当视图控制器仍在视图控制器堆栈中但是不可见时,如何防止MKMapView占用大量内存?

wfb*_*ale 2 memory-management mkmapview ios ios7

我有一个视图控制器MKMapView作为子视图.该视图控制器又转向视图控制器,视图控制器又转向另一个视图控制器.MKMapView可以使我的Apps内存占用高达60mb.

虽然正在介绍其他视图控制器,但有没有办法减少它的占用空间MKMapView而不完全将其从超级视图中删除并取消分配它?

wfb*_*ale 5

在不改变视图层次结构的情况下实现此目的的一种方法是切换MKMapViewmapType.这导致MKMapView释放其所有地图图块并显着减少其内存占用.

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

    // Toggling this property forces the map view
    // to release its tiles, freeing up memory.
    self.mapView.mapType = MKMapTypeHybrid;
    self.mapView.mapType = MKMapTypeStandard;
}
Run Code Online (Sandbox Code Playgroud)

在检查配置文件中的堆分配时,我观察到内存占用减少了30mb.

注意:如果完成此技巧将不起作用viewDidDisappear,切换mapType in viewDidDisappear将导致在返回视图时释放切片.如果有人知道为什么会有奖励积分?