我正在开发一个项目,其中包含一个带 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中删除。
即使这没有任何区别。
我知道如何克服这个问题?
由于
答案 0 :(得分:0)
在app委托中存储MapView似乎是一个奇怪的解决方案。我会像你原来那样把它包含在一个控制器里。
我最初实现的是,我在xib中添加了MapView然后 每次加载此页面,然后生活叮咬增加10mb。
这是你的问题,它看起来像是内存泄漏。如果正确处理对象/内存,应用程序大小不应增加。确保使用arc并检查是否在viewWillDisappear方法中将所有必需对象(例如NSTimers,NSNotifications)设置为nil。