1

我正在做这样的事情:

@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) {
   ...
}

没有运气。

4

1 回答 1

4

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

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

或者,但不推荐,您可以保留委托。但是,这可能会导致保留周期

于 2008-12-30T13:36:48.480 回答