0

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

现在这个页面被加载并关闭了几次。

我首先实现的是,我在 xib 中添加了 MapView,然后每次加载此页面时,实时数据会增加 10mb。

解决方案1

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

我试过这个,它在一定程度上减少了内存使用量,但由于Received Memory Warning导致应用程序再次崩溃。

现在,如果我在崩溃后再次启动该应用程序,那么它曾经在第一次打开 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 的超级视图中删除。

即使这也没有任何区别。

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

谢谢

4

1 回答 1

0

在应用程序委托中存储 MapView 似乎有点奇怪。我会像您最初那样将其包含在单个控制器中。

我首先实现的是,我在 xib 中添加了 MapView,然后每次加载此页面时,实时数据会增加 10mb。

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

于 2013-10-10T11:02:11.983 回答