【问题标题】:MapKit/Location Manager crashes app when unloading viewMapKit/Location Manager 在卸载视图时使应用程序崩溃
【发布时间】:2011-01-31 13:32:24
【问题描述】:

我有一个错误,当我点击导航栏上的返回键并卸载具有 MapKit (mapView) 并使用位置管理器的视图时,我的应用程序崩溃了“EXC_BAD_ACCESS”。尝试了几天来修复这个错误,最后为遇到这个问题的任何人想出了一个修复:

将此代码添加到您的交易中

- (void)dealloc {
    mapView.delegate = nil;
    locationManager.delegate = nil;

    [mapView release];
    [locationManager release];
}

【问题讨论】:

  • 谢谢,伙计!奇怪的是,你无法在模拟器中重现它。
  • 请提供更多实施细节。它看起来像一些obj。已经发布。顺便说一句,在 dealloc 中将委托归零是一个好习惯。
  • 没有看到崩溃日志真的无法分辨。但看起来你发布了两次。尝试添加 NSZombieEnabled,这将告诉您是否尝试访问内存中已释放的内容。

标签: crash mapkit cllocationmanager


【解决方案1】:

我也有这个,:) 而且,是的,这个修复实际上是一个正确的修复;

- (void)dealloc {
  mapView.delegate = nil;
  locationManager.delegate = nil;

  [mapView release];
  [locationManager release];
}

幕后发生的事情是这样的:

  1. 您按了后键。这将卸载并因此释放持有 mapView 的控制器。由于很可能只有一个对控制器的引用,因此它将被释放。

  2. 不过,locationManager 很可能仍然在地理定位的内部工作中的某个地方被引用。

  3. 如果 locationManager 和/或 mapView 现在向其各自的委托发送通知,则它们正在跟踪无效指针。这将导致 EXC_BAD_ACCESS 异常。

是的:取消指向 self 的代表总是一个好主意。我只是希望苹果会在那里添加一些自动魔法。

【讨论】:

    猜你喜欢
    • 2012-11-10
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2016-07-20
    • 2019-09-25
    • 1970-01-01
    相关资源
    最近更新 更多