Memory iOS6 MKMapView使用了大量内存,以至于应用程序崩溃,其他人注意到了吗?

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应用程序中使用地图时,注意到内存使用率极高,以至于一次又一次地收到内存警告,甚至导致应用程序崩溃

我已经通过仪器运行了该应用程序,没有发现任何泄漏,在创建地图视图之前,该应用程序始终以约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
      }