2014-02-18 65 views
6

我有一个视图控制器的MKMapView,当我开始缩放它消耗大量的内存 当我离开视图谁包含MKMapView内存不释放(我使用ARC我的应用程序)在ios7 sdk MKMapView内存问题

编辑

-(MKMapView*) mapView 
{ 
    if(_mapView == nil) { 
     _mapView = [[MKMapView alloc] init]; 
    } 
    return _mapView; 
} 

和viewWillDisa:

我在一些堆栈溢出的答案,我必须把中的MKMapView阅读的AppDelegate包含MKMapView的viewController的ppear放

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 

    XAppDelegate.mapView.delegate = nil; 
    [XAppDelegate.mapView removeFromSuperview]; 

} 

但它没有解决我的问题。

+0

在模拟器或设备上进行测试? – Guilherme

+0

设备(ipad air ios 7) –

+1

在整个应用中使用单个实例是一种很好的做法,只要每个视图只有一个地图即可。您可以节省内存,但这不是强制性的。 – Guilherme

回答

1

我看到的一个常见缺陷是MKOverlay对MKOverlayView/MKOverlayRenderMKMapView持有强烈的参考。这会导致保留周期,因为MKMapView也对MKOverlay实例也有强烈的参考。

+1

但我没有画出MKOverlay我只有一张空白的地图,当我开始缩放时,它消耗了大量内存 –

+0

地图是内存密集型的。你永远不会改变这一点。你必须确保的是,当它被释放时你可以回收这些内存。一般来说,除非你使用单例模式,否则_nothing_应该对MKMapView有强烈的引用。这包括包含视图控制器。它只能被保留,因为它是你的根视图的子视图。一旦根视图被释放,它应该是一样的。 – Holly