使用iOS6的的MKMapView一吨的记忆,崩溃应用的角度来看,任何人都注意到这一点?(iOS6

2019-06-18 08:56发布

有没有其他人,谁在使用地图在自己的iOS 6应用程序,注意到非常高的内存使用一遍又一遍接收内存警告崩溃的应用程序的点的点?

我已经跑了通过仪器的应用程序,我没有看到任何泄漏,直到地图视图中创建应用程序始终在围绕〜3MB直播字节运行。 一旦创建了地图和瓦片被下载的直播字节跳起来〜13MB直播字节。 接着,当我移动地图以及放大和缩小实时字节连续的攀升,直到大约40MB〜活字节的应用程序崩溃。 这是对的方式的iPhone 4。 在iPod触摸它崩溃甚至更早。

我正确地重用注解意见,并没有泄漏。 是任何人都看到新的iOS 6地图这同样高的内存使用情况? 此外,没有任何人有一个解决方案?

Answer 1:

大量的玩耍和测试不同的想法,其中一些在这里提到的后,这对我工作的最终解决方案如下。

  • 而是根据需要在应用程序中创建新的MKMapView的,我增加了一个的MKMapView属性,我的AppDelegate和仅在需要时创建它。 一旦它被创造,它生活在AppDelegate中永远和我重复使用单个实例比比皆是需要。 这减少的内存量真的帮了我以前实例几个不同的MKMapView的,并且都通过内存很快燃烧使用。

  • 我还发现,iOS 6的地图手柄释放内存非常好,一旦内存警告已收到。 是的,它同时缩放和平移,但似乎是适当的回应内存警告占用更多的内存。

  • 我不得不做的最后一件事是在我的减少整体的初始内存占用工作。 我发现我开始过比我预期的,这样也给我收到了有关内存崩溃造成一路走高。 一旦我得到了最初的足迹下来,让的MKMapView处理释放它在内存警告的内存,并确保我只有的MKMapView的1个实例,我可以重用整个应用程序,一切都运行良好。



Answer 2:

我也有这个问题和它的驾驶我坚果。 试图找出基于圣马特奥的帖子修补程序,这是我想出了:

- (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;
}

林不知道为什么,但是从上海华删除并设置为零的组合确实减少了内存使用情况。 我呼吁在控制器的viewDidDisappear此方法。

其他的事情我试过,但没有显著的影响:

1)创建autoreleasepool周围的MKMapView的ALLOC初始化

2)周围设置显示区域纬度84经度-30,因为我认为在北极矢量信息可能不会像密集的......不过,那并不帮助;)

这个问题很严重,导致我们的应用程序不稳定,并导致吨内存不足警告的的iOS 6,当然希望苹果发布比我更好的修补程序...快!

请批评我的修补程序,并拿出更有效的方法丢弃地图时削减内存使用情况。 谢谢!



Answer 3:

我遇到了同样的问题。

内存后,变焦和变化的位置永远不会释放。

我发现的唯一的窍门是在内存警告更改地图类型。



Answer 4:

这个问题仍然存在于iOS的9 - 除非你做到这一点。

经过约10-15秀Segue公司,并从与已经成立了一个故事板视图地图视图控制器会导致系统崩溃(我)和罢免周期。

现在看来,该修补程序很简单。 添加此

override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)
    mapView.removeFromSuperview()
}

似乎已经解决的问题,可以循环往返20余次,并没有问题。 没有崩溃!

希望这可以帮助。 这是一个令人沮丧的问题,并很高兴它的解决。



Answer 5:

我的足迹:2.48; 19.51; 49.64; 12.60是:装载的MapView,装载的MapView后,进/出位变焦后,之前和释放的MapView(这是很烦人的,甚至释放的MapView后,我把10MB的增量,它不走记忆后下!)

无论如何,我不使用的MapView一个IBOutlet了,我在代码中创建的一切吧。 新的足迹现在是:2.48; 19.48; 38.42; 12.54。

仍在努力把双***下来。



Answer 6:

不是一个解决方案,但只是一招...

...更改地图类型=> mapkit释放内存。

即使这个变化是几分之一秒。



Answer 7:

我有同样的感觉,不知道如何release这个memory ,即使MKMapView不被使用。

我已经发布了控制器MKMapView ,容器视图... memory仍然使用。

不记得旧体验这个MKMapView在iOS5中。



Answer 8:

- (void)applyMapViewMemoryHotFix{

    switch (self.mapView.mapType) {
        case MKMapTypeHybrid:
        {
            self.mapView.mapType = MKMapTypeStandard;
        }

            break;
        case MKMapTypeStandard:
        {
            self.mapView.mapType = MKMapTypeHybrid;
        }

            break;
        default:
            break;
    }


    self.mapView.mapType = MKMapTypeStandard;



}
-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    [self applyMapViewMemoryHotFix];
}


Answer 9:

我收到同样的问题 -

我不能完全肯定这一点,但会不会是新的苹果地图预加载地图的一个巨大的区域,以满足离线导航?

如果你把你的连接从地图加载后,再尝试和放大区域远不及所需的位置,然后似乎是一个可怕的很多细节仍然可用的。



Answer 10:

对于那些journerying这里2014+程序(iOS 8及以上)

我遇到了在iOS 7+这个问题试图支持旧设备(认为iPad 2搭配512MB)。

我的解决办法是禁用变焦,因为它很容易花费最多的内存。

   long mem = [NSProcessInfo processInfo].physicalMemory;
    if(mem < _memory_threshold){
        self.MapView.zoomEnabled = NO;
    }

我从切换地图类型,以取消分配地图,委托设为零,删除所有叠加,注解等尝试了一切

这些都不适用于iOS7 +。 事实上,大多数这些修补程序导致内存跳跃,为的MKMapView似乎泄漏,从不正确的dealloc(我已经经历了子类,我看到的dealloc打验证)。

这很烂,但我必须想出了迄今为止被禁用地图功能(缩放,滚动,用户交互),以限制内存的残暴量的MKMapView采取的一种手段。 这起码是旧设备上的半稳定造成了我的应用程序。



Answer 11:

不知道后果。

如何以往设置的地图为“零”,只要视野中消失,帮我减少内存使用从250MB〜来〜50-60MB。

-(void)viewDidDisappear:(BOOL)animated
{
     self.map = nil; 
}


Answer 12:

只有以下几行就足以解决内存问题:

对于Objective-C的:

- (void) applyMapViewMemoryFix {
  [self.mkMapView removeFromSuperview];
  self.mkMapView = nil;}

对于雨燕3.0:

func applyMapViewMemoryFix() {
    mapView.removeFromSuperview()
    self.mapView = nil
}


文章来源: iOS6 MKMapView using a ton of memory, to the point of crashing the app, anyone else notice this?