0

我刚刚将我的应用程序升级到ARC,但我在处理与委托的类时遇到了问题。因为我的目标是iOS 4.0及更高版本,所以我使用__unsafe_unretained@property (unsafe_unretained)来存储委托指针。自升级到ARC后委托指针问题

但是,我现在发现的是,我在我的视图控制器中创建的服务(包括委托)现在在我已经移除视图控制器后挂起,导致尝试与视图控制器进行通信委托)后,它已被释放...因此启用僵尸得到一个错误。

如何在视图控制器或服务中更新我的代码,以便当视图控制器被删除(弹出导航控制器堆栈)时,具有委托指针的服务也会从内存中删除?

回答

0

事实证明,这不是我说的做错了什么......

违规的NSZombie竟然是由于MKMapViewDelegate,这使发送“的MapView:didUpdateUserLocation:”视图控制器后,它属于被取消分配。我知道。

我解决它通过拦截在我的视图控制器的后退按钮,并设置委托给无弹出之前:

- (void)backButtonTapped 
{ 
    self.mapView.delegate = nil; 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

我不知道为什么MapKit持有到委托后,它一直的dealloc倒是。如果有人知道我会很感激发现更多。