我刚刚将我的应用程序升级到ARC,但是我遇到了如何使用委托处理类的问题。因为我的目标是iOS 4.0及更高版本,所以我使用__unsafe_unretained
和@property (unsafe_unretained)
来存储委托指针。
然而,我现在发现的是我在视图控制器中创建的服务(包括代理)现在在我删除了视图控制器之后就开始了,这导致尝试与视图控制器进行通信(委托)它被释放后...因此在启用僵尸时出错。
如何在视图控制器或服务中更新我的代码,以便在删除视图控制器(弹出导航控制器堆栈)时,带有委托指针的服务也会从内存中删除?
答案 0 :(得分:0)
事实证明,不是我做错了什么......
违规的NSZombie原来是MKMapViewDelegate
,它继续发送'mapView:didUpdateUserLocation:'后,它所属的视图控制器被取消分配。我知道。
我通过截取View Controller中的Back按钮解决了这个问题,并在弹出它之前将委托设置为nil:
- (void)backButtonTapped
{
self.mapView.delegate = nil;
[self.navigationController popViewControllerAnimated:YES];
}
我不知道为什么MapKit在dealloc'd之后会占用委托。如果有人知道我会很感激找到更多。