我正在做这样的事情:
@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) {
...
}
没有运气。
答案 0 :(得分:4)
您的委托应该在其dealloc中删除myObject的委托属性以避免这种情况:
- (void) dealloc {
if (myObject.delegate == self) myObject.delegate = nil;
[super dealloc];
}
或者,但不推荐,您可以保留代理人。但是,这可能会导致retain cycle。