我有2个视图控制器,第一个名为InitialVC
,包含UIButton
,在单击时会推送第二个视图控制器。 InitialVC
中嵌入了UINavigationController
。
第二个视图控制器是MapVC
,其中包含MKMapView
和后退按钮。
加载InitialVC
时,内存使用量 30MB 。然后,当它被推入MapVC
时,内存使用量会跳至 100MB 。当我按后退按钮导航回InitialVC
时,内存使用量仍然 100MB 。
这意味着MKMapView
仍然在后台运行。
我不想要这个,这肯定会导致性能问题。我了解默认情况下,MKMapView
会在发出内存警告(didReceiveMemoryWarning
)后卸载,但我的问题是,解除{{1>}是一个好习惯1}}在MKMapView
/ viewWillDisappear
/ viewDidUnload
/ viewDidDisappear
等?还是有更好的控制内存使用?
如果你需要代码,这里(没什么特别的):
InitialVC.m
viewWillUnload
MapVC.m
- (IBAction)clickMap:(id)sender {
MapVC *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MapVC"];
[self.navigationController pushViewController:vc animated:YES];
}
我没有为@interface MapVC {
IBOutlet MKMapView *map_view;
}
@end
- (IBAction)clickBack:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
设置@property
,因为它没有在其他类中使用。
其他信息:
注意:此问题也可能适用于MKMapView
以外的案例。
更新
将MKMapView
中的强引用更改为:
@interface
内存模式现在是:
@property (nonatomic, weak) IBOutlet MKMapView *map_view;
: 30MB InitialVC
: 100MB MapVC
: 90MB InitialVC
: 100MB MapVC
: 90MB 内存问题略有缓解。
更新2:
进行dealloc测试; InitialVC
没有被调用
更新3:
有一个- (void)dealloc
连接,以及一个非重复的MKMapViewDelegate
事件,当用户拖动地图时会触发该事件。 NSTimer
事件中还有一个基于AFNetworking
2块的通知,它从服务器获取数据并更新地图上的注释。注意:服务器响应已成功完成。