App*_*fer 7 crash mapkit cllocationmanager
我有一个错误,当我点击导航栏上的后退键并且卸载了具有MapKit(mapView)并使用位置管理器的视图时,我的应用程序崩溃了"EXC_BAD_ACCESS".试了好几天来修复这个bug,最后找到了解决这个问题的人的修复:
将此代码添加到您的dealloc
- (void)dealloc {
mapView.delegate = nil;
locationManager.delegate = nil;
[mapView release];
[locationManager release];
}
Run Code Online (Sandbox Code Playgroud)
我也有这个,:) 而且,是的,这个修复实际上是一个正确的修复;
- (void)dealloc {
mapView.delegate = nil;
locationManager.delegate = nil;
[mapView release];
[locationManager release];
}
Run Code Online (Sandbox Code Playgroud)
幕后发生的事情是这样的:
你按下了后退键。这会卸载并释放持有地图视图的控制器。由于很可能只有一个对控制器的引用,因此它将被释放。
然而,locationManager 很可能仍然在地理定位内部运作的某个地方被引用。
如果 locationManager 和/或 mapView 现在向其各自的委托发送通知,则它们正在跟踪无效指针。这将导致 EXC_BAD_ACCESS 异常。
是的:消除指向 self 的代表总是一个好主意。我只是希望苹果能在那里添加一些自动魔法。