当前位置:  开发笔记 > Android > 正文

如果我不再使用MKMapView,为什么我会崩溃?

如何解决《如果我不再使用MKMapView,为什么我会崩溃?》经验,为你挑选了2个好方法。

我有一个MKMapView.有时在我的视图控制器被解雇后,我会得到一个EXC_BAD_ACCESS.

我打开了NSSZombies,它看起来像是MKMapView代表 - 我的视图控制器!- 正在被调用,尽管释放了子类MKMapViewUIViewController子类.我已经检查了,我的记忆管理是正确的.

这是怎么回事?



1> Steven Fishe..:

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

解决方法很简单:作为视图控制器清理的一部分,将地图视图的委托设置为nil,这将阻止MKMapView向其发送消息.

这在MKMapViewDelegate协议参考中有记录:

在释放已设置委托的MKMapView对象之前,请记住将该对象的委托属性设置为nil.您可以在dealloc方法中处理地图视图.

编辑:给Oscar一个upvote,就在下面,谁在这里提供了文档引用.

鉴于ARC,我建议这意味着您应该nil在视图控制器中设置地图视图的委托dealloc.


谢谢.我的问题是我们是否应该以某种方式知道这一点.如果期望MapView的用户,那么为什么我们不必清除接受委托的所有控件的委托指针?

2> Oscar..:

好的,这是对答案的确认.它来自Apple文档,但它从MKMapView中丢失了.它仅在其委托协议的文档下找到:

在释放已设置委托的MKMapView对象之前,请记住将该对象的委托属性设置为nil.您可以在dealloc方法中处理地图视图.

注意:这也适用于UIWebView.

我在委托的dealloc方法中将MapView的委托指针设置为nil,我们的崩溃似乎已被删除.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有