gpt4 book ai didi

ios - MKMapView 的多个 ViewController

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:45 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个 UINavigationController

在某些页面中,我得到了一个 MKMapView 作为后 View (允许更改 map View 覆盖 UIView UI,所以我不能将其作为图片)。在某些组合中,可能分配了 3 个左右的 MKMapView

问题是每个 MKMapView 占用将近 60MB,因此只有 map 的内存会跳到 180+ MB。更不用说如果用户打开更多带有 map 的 ViewController,他将得到一个 OutOfMemoryException

所有 map 都具有相同的内容,我尝试将 map 从 ViewController 移动到另一个,但根据 StackOverflow 中的另一篇文章,将 UIViewViewController 移动 另一个是反对 MVC,更不用说它将它从调用者 ViewController 中删除。

基本上,因为所有 map 都包含相同的内容,而且我希望它们包含所有注释,所以最好只移动 map ,但我很难做到这一点。

我有一个开箱即用的解决方案,就是从它的 superView 中删除 MKMapView 并在 viewWillAppear 上重新分配它,但这看起来不像最好的主意。

最佳答案

当您从一个 Controller 移动到另一个 Controller 时,我没有看到将指针传递给单个 map View 有任何问题。除非您一次查看不止一张 map ,否则我不明白为什么应该有多个实例。在 viewWillDisappear 中移除 View ,并在 prepareForSegue 中传递一个指向 map 的指针:

- (void)viewDidLoad {
[super viewDidLoad];
if (! self.mapView) {
self.mapView = [[MKMapView alloc] initWithFrame:self.view.frame];
}
}


-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.view addSubview:self.mapView];
[self.view sendSubviewToBack:self.mapView];
}

-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.mapView removeFromSuperview];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
SecondViewController *secVC = segue.destinationViewController;
secVC.mapView = self.mapView;
}

后续 Controller 可以在 viewWillAppear、viewWillDisappear 和 prepareForSegue 中具有相同的代码(除了 destinationViewController 是哪个 Controller )。该 map 只需要在第一个 Controller 的 viewDidLoad 方法中实例化一次。一个更简单的实现是让所有后续的 View Controller 继承自第一个 Controller 。如果您这样做,则无需在 viewWillAppear 或 viewWillDisappear 中添加任何内容。您只需要重写 prepareForSegue。

关于ios - MKMapView 的多个 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20735581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com