从导航控制器弹出后卸载MKMapView

时间:2014-05-22 02:57:19

标签: ios objective-c memory-management automatic-ref-counting

我有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,因为它没有在其他类中使用。

其他信息:

  • 使用ARC
  • 使用Storyboard
  • 使用iOS 7 SDK
  • 使用Xcode 5.x

注意:此问题也可能适用于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块的通知,它从服务器获取数据并更新地图上的注释。注意:服务器响应已成功完成。

0 个答案:

没有答案