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