如何检查代表是否有效?
问题描述:
我在做这样的事情:如何检查代表是否有效?
@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) {
...
}
没有运气。
答
你代表应无出其的dealloc myObject的的委托财产,以避免这种情况:
- (void) dealloc {
if (myObject.delegate == self) myObject.delegate = nil;
[super dealloc];
}
或者,但不推荐,你可以保留的委托。但是,这可能导致retain cycle。
辉煌,这看起来它应该也工作! 我之前留着代表来解决我遇到的问题 - 但是我的代码看起来很杂乱,而且感觉不太对劲。 上面的解决方案看起来像解决了这个问题。 再次感谢, 尼克。 – 2008-12-30 13:43:45