0

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

但是,我现在发现的是,我在视图控制器中创建的服务(包括委托)在我删除该视图控制器后现在仍然存在,这导致在它之后尝试与视图控制器(委托)进行通信已被释放...因此在启用 Zombies 时出现错误。

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

4

1 回答 1

0

事实证明,做错事的不是我……

有问题的 NSZombie 原来是由于MKMapViewDelegate,它在它所属的 View Controller 被释放后不断发送“mapView:didUpdateUserLocation:”。我知道。

我通过拦截 View Controller 中的 Back 按钮来解决它,并在弹出之前将委托设置为 nil:

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

我不知道为什么 MapKit 在解除分配后会保留委托。如果有人知道我会很感激了解更多。

于 2012-07-13T12:58:38.107 回答