Iphone 地理定位、反向地理编码器、回调和对象解除分配

Iphone 地理定位、反向地理编码器、回调和对象解除分配,iphone,reverse-geocoding,memory-management,Iphone,Reverse Geocoding,Memory Management,在我的应用程序中,我获取用户位置并进行反向地理编码。同时,用户可以写一个注释。 有时,当我调试并运行我的应用程序时,我会得到以下消息: *** -[MyViewController respondsToSelector:]: message sent to deallocated instance 0x61a6920 我没有成功地解决这个问题,但我注意到禁用地理定位不会出现问题(至少直到现在)。 所以我认为,当地理定位打开时,反向地理编码器(一个单独的线程)可以在控制器已经释放时返回。 可能吗

在我的应用程序中,我获取用户位置并进行反向地理编码。同时,用户可以写一个注释。 有时,当我调试并运行我的应用程序时,我会得到以下消息:

*** -[MyViewController respondsToSelector:]: message sent to deallocated instance 0x61a6920
我没有成功地解决这个问题,但我注意到禁用地理定位不会出现问题(至少直到现在)。 所以我认为,当地理定位打开时,反向地理编码器(一个单独的线程)可以在控制器已经释放时返回。 可能吗?如果是这样的话,如何避免呢

谢谢

Fran

对于异步进程(如反向地理编码)的委托,完全有可能从该进程下解除锁定(事实上,这是一个相当常见的错误)。当这种情况发生时,(在本例中)地理编码器将很高兴地对解除分配的委托对象调用其委托方法,就像您看到的那样

这就是为什么
MKReverseGeocoder
有一个
-cancel
方法。您希望在您用作geocoder委托的类中调用
-(void)dealloc
。还可以将地理编码器的委托设置为
nil

这很可能意味着您需要向该类添加一个命名/合成属性,以保留地理编码器的句柄。这样,您就可以在dealloc方法中说“cancel”