回调一个dealloced委托时处理?

时间:2010-04-27 09:36:05

标签: iphone objective-c callback delegates

我在两个类之间实现了委托 - 回调模式而没有保留委托。但在某些情况下,代表被解除分配。

(我的情况是我有一个ViewController是委托对象,当用户按下后退按钮将ViewController弹出NavigationController堆栈时)

然后回调方法得到BAD_EXE:

if (self.delegate != nil && [self.delegate respondsToSelector:selector]) {
    [self.delegate performSelector:selector withObject:self withObject:returnObject];
} 

我知道委托回调模式是在很多应用程序中实现的。你有什么解决方案?

2 个答案:

答案 0 :(得分:2)

通常,委托应始终将其与其dealloc方法中的委托对象取消关联。因此,您的视图控制器应检查其dealloc是否将其设置为委托类的委托,如果是,请将委托属性设置为nil

在大多数情况下,我认为这不会是一个问题,因为委托通常是委托对象的唯一所有者。因此,当委托被取消分配时,委托对象也将被取消分配。毕竟,这就是委托对象通常只包含对其委托的弱引用的原因。

答案 1 :(得分:0)

我没有客观知识,但我认为你需要单独测试self.delegate != nil,例如

if (self.delegate != nil)
{
 if ( [self.delegate respondsToSelector:selector]) 
 {
    [self.delegate performSelector:selector withObject:self withObject:returnObject];
 }
}

哦,如果代表是零,最好重新分配代表。