有没有其他人,他们在iOS 6应用程序中使用地图,注意到极高的内存使用,一直到接收内存警告到崩溃的应用程序?
我通过仪器运行应用程序,我没有看到任何泄漏,直到创建地图视图,应用程序始终以大约3mb Live Bytes运行.创建地图并下载切片后,Live Bytes会跳至~13mb Live Bytes.然后,当我移动地图并放大和缩小Live Bytes连续体时,直到应用程序崩溃在大约40mb Live Bytes.顺便提一下,这是在iPhone 4上.在iPod touch上它甚至更早崩溃.
我正在重复使用注释视图,没有任何泄漏.是否有其他人在使用新的iOS 6地图时看到了相同的高内存使用量?还有,有没有人有解决方案?
我有一个非常简单的应用程序,有几个视图控制器.第二个视图控制器中有一个MKMapView.它设置正确,功能正常.问题是,每次加载它的视图时,内存使用量会跳跃~30mb,并且永远不会回落,所以每次进入视图时它都会继续跳跃并最终变得超高.当我离开控制器时我尝试删除地图视图:
override func viewWillDisappear(animated: Bool) {
map.removeFromSuperview()
}
Run Code Online (Sandbox Code Playgroud)
但它对记忆没有任何影响.地图视图委托设置为其视图控制器.
我尝试使用Xcode仪器检查泄漏,但没有找到任何东西.
有谁知道如何解决这一问题?
谢谢
编辑:添加这似乎工作:
func removeNastyMapMemory() {
map.mapType = MKMapType.Hybrid
map.delegate = nil
map.removeFromSuperview()
map = nil
}
override func viewWillDisappear(animated: Bool) {
removeNastyMapMemory()
}
Run Code Online (Sandbox Code Playgroud) 我已经按照几个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;
}
Run Code Online (Sandbox Code Playgroud)
在某种程度上,它有效,但不完全.我来提供一些数据.
以下是Instruments的内存分配记录.

两个红色标记(Generations)表示我MKMapView在模态视图控制器中显示之前的状态以及我解除它之后的状态.MKMapView好像被解除了分配.例如,如果我在Instruments中过滤Statistics堆栈,则在MKMapView呈现模态视图时确实会出现该对象,并且一旦关闭它就会消失.但是,在取消了地图视图后,我仍然有30多MB的内存尚未被释放.
第B代(第二个红旗)数据显示存在大量保存此内存的对象(和非对象).

当我查看其中一个实例的扩展细节时,它通常会显示一个包含私有类的堆栈跟踪,我猜这些私有类与地图绘制有关

有谁知道如何释放所有数据?我可以/应该清理一些缓存吗?