gpt4 book ai didi

map - 一段时间后,iOS 6 MKMapView 内存泄漏和崩溃应用程序

转载 作者:行者123 更新时间:2023-12-03 15:38:29 24 4
gpt4 key购买 nike

iOS 6 MKMapView 似乎正在使用大量内存,当我们开始缩放并在我们的应用程序中使用 Map View 时(大约 7-10 分钟),当我们从具有 MKMapView 的 Controller 中出来时,它有些不是释放总内存(我在我的应用程序中使用 ARC)。我正在通过 NIB 分配和初始化 MKMapView。

Controller 1 --> Controller 2(有 MKMapView)

1.5MB --> 40-60MB(我用仪器查漏,但没用)

当我回到 Controller1 时,事件字节似乎是 7-10MB,每次访问 Controller 2 后,事件字节都会增加大约 2-3MB,一段时间后应用程序崩溃,在控制台中显示“接收到的内存”警告”。有人可以帮忙吗?如果您需要更多信息,请告诉我。提前致谢。

最佳答案

这是因为 MKMapView 的工作方式。有一个操作挂起,所以 MapKit 保留了 MKMapView,它实际上还没有被释放。这本身不是问题。问题是它仍在向您的代表发送消息。

解决方法很简单:作为 View Controller 清理的一部分,将 map View 的委托(delegate)设置为 nil,这将阻止 MKMapView 向其发送消息。

这记录在 MKMapViewDelegate 协议(protocol)引用中:

在释放您已为其设置委托(delegate)的 MKMapView 对象之前,请记住将该对象的委托(delegate)属性设置为 nil。您可以在其中处理 map View 的 dealloc 方法中执行此操作。

编辑:也给 Oscar 一个赞成票,就在下面,谁在这里提供了文档报价。

鉴于 ARC,我建议这意味着您应该在 View Controller 的 dealloc 中将 map View 的委托(delegate)设置为 nil。

你可以做一些这样的事情来解决我的问题。更改 map 类型也有帮助。

- (void)applyMapViewMemoryHotFix{

switch (self.mapView.mapView.mapType) {
case MKMapTypeHybrid:
{
self.mapView.mapView.mapType = MKMapTypeStandard;
}

break;
case MKMapTypeStandard:
{
self.mapView.mapView.mapType = MKMapTypeHybrid;
}

break;
default:
break;
}
self.mapView.showsUserLocation = NO;
self.mapView.delegate = nil;
[self.mapView removeFromSuperview];
self.mapView = nil;
}

-(void)viewDidDisappear:(BOOL)animated
{
[self applyMapViewMemoryHotFix];
}

关于map - 一段时间后,iOS 6 MKMapView 内存泄漏和崩溃应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15922927/

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