Memory iOS6 MKMapView使用了大量内存,以至于应用程序崩溃,其他人注意到了吗?
有没有其他人在iOS 6应用程序中使用地图时,注意到内存使用率极高,以至于一次又一次地收到内存警告,甚至导致应用程序崩溃 我已经通过仪器运行了该应用程序,没有发现任何泄漏,在创建地图视图之前,该应用程序始终以约3mb的活动字节运行。一旦创建了地图并下载了磁贴,活动字节将跳至~13mb的活动字节。然后,当我移动地图并放大和缩小活动字节时,不断攀升,直到应用程序以大约40mb的活动字节崩溃。顺便说一下,这是在iPhone4上。在iPodtouch上,它甚至更早崩溃Memory iOS6 MKMapView使用了大量内存,以至于应用程序崩溃,其他人注意到了吗?,memory,memory-management,mkmapview,ios6,ios6-maps,Memory,Memory Management,Mkmapview,Ios6,Ios6 Maps,有没有其他人在iOS 6应用程序中使用地图时,注意到内存使用率极高,以至于一次又一次地收到内存警告,甚至导致应用程序崩溃 我已经通过仪器运行了该应用程序,没有发现任何泄漏,在创建地图视图之前,该应用程序始终以约3mb的活动字节运行。一旦创建了地图并下载了磁贴,活动字节将跳至~13mb的活动字节。然后,当我移动地图并放大和缩小活动字节时,不断攀升,直到应用程序以大约40mb的活动字节崩溃。顺便说一下,这是在iPhone4上。在iPodtouch上,它甚至更早崩溃 我正确地重用注释视图,没有任何泄漏
我正确地重用注释视图,没有任何泄漏。有没有其他人看到新的iOS 6地图也有如此高的内存使用率?还有,有人有解决办法吗?我的足迹是:2.48;19.51; 49.64; 12.60即:加载mapView之前、加载mapView之后、放大/缩小一点之后,以及释放mapView之后的内存(这很烦人,即使在释放mapView之后,我仍保持10MB的增量,并且不会下降!) 无论如何,我不再为MapView使用IBOutlet,而是用代码创建所有内容。新的足迹现在是:2.48;19.48; 38.42; 12.54
仍在努力放下bi***。我也有同样的感觉,不知道如何
释放这个内存
,即使没有使用MKMapView
我已经发布了控制器,MKMapView
,容器视图<代码>内存仍在使用中
不要记得在iOS5中使用旧的MKMapView
时遇到过这种情况。我也遇到过同样的问题
在缩放和更改位置后,永远不会释放内存
我发现的唯一诀窍是在内存警告后更改映射类型。不是解决方案,只是一个诀窍
。。。更改mapType=>mapkit释放内存
即使这一变化只持续了几分之一秒。我也有这个问题,它让我发疯。
试图根据mateo的帖子找出一个修补程序,这是我想到的:
- (void)applyMapViewMemoryHotFix{
switch (self.mkMapView.mapType) {
case MKMapTypeHybrid:
{
self.mkMapView.mapType = MKMapTypeStandard;
}
break;
case MKMapTypeStandard:
{
self.mkMapView.mapType = MKMapTypeHybrid;
}
break;
default:
break;
}
[self.mkMapView removeFromSuperview];
self.mkMapView = nil;
}
我不知道为什么,但是从superview中删除然后设置为nil的组合确实减少了内存使用。我在控制器的视图中调用此方法
其他我尝试过但没有显著效果的事情:
1) 围绕mkMapView的alloc init创建自动释放池
2) 将显示区域设置在lat 84 lon-30附近,因为我认为北极的矢量信息可能没有这么密集。。。但是,这没有帮助;)
这个问题非常严重,导致我们的应用程序不稳定,并在iOS 6中导致大量内存警告。当然希望苹果发布比我更好的修补程序。。。很快
请评论我的修补程序,并提出更有效的方法来减少丢弃地图时的内存使用。谢谢 我收到了同样的问题-
我不完全确定这一点,但是否新的苹果地图预装了一大片地图以满足离线导航的需要
如果在地图加载后关闭连接,然后尝试放大离所需位置不远的区域,那么似乎还有很多细节可用。经过大量的尝试和测试不同的想法,其中一些在这里提到,最后对我有效的解决方案如下
- 我没有根据需要在应用程序中创建新的MKMapView,而是将MKMapView属性添加到我的AppDelegate中,并仅在需要时创建它。一旦创建了它,它就永远存在于AppDelegate中,我会在任何需要的地方重用这个实例。这确实有助于减少使用的内存量,因为我之前实例化了两个不同的MKMapView,两个MKMapView都非常快地消耗了内存
- 我还发现,一旦收到内存警告,iOS6映射就可以很好地释放内存。是的,它在缩放和平移时确实会占用更多内存,但似乎对内存警告做出了适当的响应
- 我必须做的最后一件事是减少我的总体初始内存占用。我注意到我的起步比我预期的要高,所以这也导致了与记忆有关的崩溃。一旦我得到了最初的内存占用,让MKMapView在内存警告期间释放内存,并确保我只有一个可以在整个应用程序中重用的MKMapView实例,一切都正常运行
不确定后果
每当视图消失时,如何将map设置为“nil”,帮助我将内存使用量从~250MB减少到~50-60MB
-(void)viewDidDisappear:(BOOL)animated
{
self.map = nil;
}
对于2014+年在这里工作的人(iOS8及以上)
我在iOS 7+上遇到了这个问题,试图支持较旧的设备(比如512MB的iPad2)
我的解决方案是禁用缩放,因为它很容易占用最多的内存
long mem = [NSProcessInfo processInfo].physicalMemory;
if(mem < _memory_threshold){
self.MapView.zoomEnabled = NO;
}
long mem=[NSProcessInfo processInfo].physicalMemory;
if(内存<\内存\阈值){
self.MapView.zoomEnabled=否;
}
我尝试了从切换贴图类型到取消分配贴图、将委托设置为nil、删除所有覆盖、注释等各种方法
这些都不适用于iOS7+。事实上,大多数修复都会导致内存跳转,因为MKMapView似乎会泄漏,并且从未正确地解除锁定(我已经通过子分类验证了我看到了解除锁定命中)
这很糟糕,但到目前为止,我想到的只是禁用地图功能(缩放、滚动、用户交互),以此限制MKMapView占用的大量内存。这导致我的应用程序在旧设备上至少是半稳定的。这个问题在iOS 9中仍然存在,除非你这样做
使用m从视图控制器切换到视图控制器
long mem = [NSProcessInfo processInfo].physicalMemory;
if(mem < _memory_threshold){
self.MapView.zoomEnabled = NO;
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
mapView.removeFromSuperview()
}
- (void) applyMapViewMemoryFix {
[self.mkMapView removeFromSuperview];
self.mkMapView = nil;}
func applyMapViewMemoryFix() {
mapView.removeFromSuperview()
self.mapView = nil
}