我有一个MKMapView作为子视图的视图控制器。该视图控制器依次选择一个视图控制器,该视图控制器依次选择另一个视图控制器。 MKMapView可以使我的Apps内存占用高达60mb。

当展示其他视图控制器时,是否有一种方法可以减少MKMapView的占用空间,而又不从其 super 视图中完全删除它并取消分配它呢?

最佳答案

在不更改视图层次结构的情况下完成此操作的一种方法是切换MKMapView的mapType。这导致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;
}

在分析配置文件中的堆分配时,我发现内存占用减少了30mb。

注意:如果在viewDidDisappear中完成此技巧将不起作用,在viewDidDisappear中切换mapType将导致在返回视图时释放图块。如果有人知道为什么会获得加分?

10-04 16:31