加载MapView时收到内存警告

时间:2013-10-10 09:36:46

标签: iphone ios objective-c ios6 mkmapview

我正在开发一个项目,其中包含一个带 MapView 的ViewController。

现在这个页面被多次加载和解散。

我最初实现的是,我在xib中添加了MapView,然后每次加载此页面时,实际的咬合量增加了10mb。

解决方法1

然后在对此问题进行研究之后,我发现使用 MKMapView 的单个对象并在 AppDelegate 中定义它并一直使用它。

我尝试了这个,它在一定程度上减少了内存使用量,但是在某段时间后,由于收到内存警告,应用程序崩溃了。

现在,如果我在崩溃后再次启动应用程序,那么它在第一次打开MapView页面时会崩溃,此时的实时大约只有11mb

  

这是在AppDelegate中添加mapview的代码

 mapView=[[MKMapView alloc]initWithFrame:CGRectMake(0, 0, 300, 450)]; 

[self.window addSubview:mapView]; 

mapView.delegate=self; 

mapView.hidden=YES;
  

这是我用来加载Mapview的代码。

- (void)viewDidLoad
{
    [super viewDidLoad];

    latittude=[[[NSUserDefaults standardUserDefaults]valueForKey:@"LATITUDE"] floatValue];
    longitude=[[[NSUserDefaults standardUserDefaults] valueForKey:@"LONGITUDE"] floatValue];

    APPDELEGATE.mapView.frame=CGRectMake(0, 140, 320, 290);

}

-(void)viewDidAppear:(BOOL)animated
{
    APPDELEGATE.mapView.hidden=NO;

    CLLocationCoordinate2D location;
    location.latitude  = latittude;
    location.longitude = longitude;

    Annotation *a;
    a=[[Annotation alloc]initWithCoordinate:location];
    [APPDELEGATE.mapView addAnnotation:a ];
}

-(void)viewWillDisappear:(BOOL)animated
{
    APPDELEGATE.mapView.hidden=YES;
}   

溶液2

我发现第二个解决方案是在视图消失时更改MapView类型。

所以我更改了它的类型,将其委托更改为nil并从ViewWillDisappear上的superview中删除。

即使这没有任何区别。

我知道如何克服这个问题?

由于

1 个答案:

答案 0 :(得分:0)

在app委托中存储MapView似乎是一个奇怪的解决方案。我会像你原来那样把它包含在一个控制器里。

  

我最初实现的是,我在xib中添加了MapView然后   每次加载此页面,然后生活叮咬增加10mb。

这是你的问题,它看起来像是内存泄漏。如果正确处理对象/内存,应用程序大小不应增加。确保使用arc并检查是否在viewWillDisappear方法中将所有必需对象(例如NSTimers,NSNotifications)设置为nil。