【问题标题】:How do i check to see if a delegate is valid?我如何检查代表是否有效?
【发布时间】:2012-10-23 18:22:23
【问题描述】:

我正在做这样的事情:

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

没有运气。

【问题讨论】:

    标签: iphone delegates protocols


    【解决方案1】:

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

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

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

    【讨论】:

    • 太棒了,这看起来也应该有效!我之前一直保留代表来解决我遇到的问题——但我的代码看起来很乱,感觉不太对劲。您上面的解决方案看起来可以解决这个问题。再次感谢尼克。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2020-04-04
    • 1970-01-01
    • 2010-12-20
    • 2011-08-01
    相关资源
    最近更新 更多