我有一个MKMapView
.有时在我的视图控制器被解雇后,我会得到一个EXC_BAD_ACCESS
.
我打开了NSSZombies
,它看起来像是MKMapView
代表 - 我的视图控制器!- 正在被调用,尽管释放了子类MKMapView
和UIViewController
子类.我已经检查了,我的记忆管理是正确的.
这是怎么回事?
这是因为工作方式MKMapView
.有一个操作挂起,所以MapKit保留了MKMapView
它并且它实际上还没有被释放.这本身不是问题.问题是它仍在向您的代表发送消息.
解决方法很简单:作为视图控制器清理的一部分,将地图视图的委托设置为nil
,这将阻止MKMapView
向其发送消息.
这在MKMapViewDelegate协议参考中有记录:
在释放已设置委托的MKMapView对象之前,请记住将该对象的委托属性设置为nil.您可以在dealloc方法中处理地图视图.
编辑:给Oscar一个upvote,就在下面,谁在这里提供了文档引用.
鉴于ARC,我建议这意味着您应该nil
在视图控制器中设置地图视图的委托dealloc
.
好的,这是对答案的确认.它来自Apple文档,但它从MKMapView中丢失了.它仅在其委托协议的文档下找到:
在释放已设置委托的MKMapView对象之前,请记住将该对象的委托属性设置为nil.您可以在dealloc方法中处理地图视图.
注意:这也适用于UIWebView.
我在委托的dealloc方法中将MapView的委托指针设置为nil,我们的崩溃似乎已被删除.