自升级到ARC以来委派指针问题

时间:2012-07-13 10:28:38

标签: ios4 delegates automatic-ref-counting memory-management unsafe-unretained

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

然而,我现在发现的是我在视图控制器中创建的服务(包括代理)现在在我删除了视图控制器之后就开始了,这导致尝试与视图控制器进行通信(委托)它被释放后...因此在启用僵尸时出错。

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

1 个答案:

答案 0 :(得分:0)

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

违规的NSZombie原来是MKMapViewDelegate,它继续发送'mapView:didUpdateUserLocation:'后,它所属的视图控制器被取消分配。我知道。

我通过截取View Controller中的Back按钮解决了这个问题,并在弹出它之前将委托设置为nil:

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

我不知道为什么MapKit在dealloc'd之后会占用委托。如果有人知道我会很感激找到更多。