我有一个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将导致在返回视图时释放图块。如果有人知道为什么会获得加分?