我已经遵循了若干SO问题中提供的建议,比如这个,为了释放MKMapView
占用的内存 - 下面是我的代码
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
self.map.mapType = MKMapTypeHybrid;
self.map.showsUserLocation = NO;
self.map.delegate = nil;
[self.map removeFromSuperview];
self.map = nil;
self.locationManager.delegate = nil;
}
部分功能可以正常工作,但并不完全。让我提供一些数据。
以下是来自Instruments的内存分配记录。
两个红旗(代际)表示我在模态视图控制器中显示
MKMapView
之前和之后的状态。 MKMapView
似乎被释放了。例如,如果我在Instruments中过滤MKMapView
的统计堆栈,则对象确实会在模态视图呈现时出现,并在关闭模态视图后消失。然而,在关闭地图视图后,我仍然有30多MB的内存没有被释放。第二个红旗(B代际)数据显示有大量的对象(和非对象)持有这些内存。
当我查看其中一个实例的详细信息时,通常会显示一个堆栈跟踪,其中包含我猜与地图绘制相关的私有类。 有人知道如何释放所有这些数据吗?是否有某个缓存可以/应该清除?
self.locationManager
设置为nil
,似乎有所帮助,但实际上并没有——内存仍然被分配了。 - artooras