我如何检查代表是否有效?

时间:2008-12-30 10:40:52

标签: iphone delegates protocols

我正在做这样的事情:

@protocol CallbackDelegate
-(void) performCallback;
@end

@interface MyObject : NSObject {
   id<CallbackDelegate> delegate;
}

-(void)AsyncFuncCall;

@end

@property (nonatomic, assign) id<CallbackDelegate> *delegate;

拥有MyObject的代码设置一个委托来接收回调函数:

MyObject *myobject = [[MyOject alloc] init];
myobject.delegate = x;

然后在MyObject中,作为异步函数调用的结果,我将向代表发回信号:

-(void)AsyncFuncCall {
   [delegate performCallback];
}

大部分时间似乎都运行良好,除了因为有效的内存清理而释放了我的委托的情况。在这种情况下,我只是想不执行回调

有谁知道检查代表是否有效的最佳方式?

我尝试过各种各样的事情,例如:

if (delegate != nil) {
   ...
}

没有运气。

1 个答案:

答案 0 :(得分:4)

您的委托应该在其dealloc中删除myObject的委托属性以避免这种情况:

- (void) dealloc {
  if (myObject.delegate == self) myObject.delegate = nil;
  [super dealloc];
}

或者,但不推荐,您可以保留代理人。但是,这可能会导致retain cycle