3

我已经实现了一个自定义委托,RandomClassDelegate, inRandomClass.mRandomClass.h。现在我需要实现委托变量,并让它调用协议中的方法,如下所示:

[self.delegate randomClassDelegateMethod];

显然,如果delegate从未设置,这将使程序崩溃并导致运行时错误。明显的解决方案是这样做:

if (delegate)
{
[self.delegate randomClassDelegateMethod];
}

但我想知道这是否是正确的模式,或者是否有更好的方法来做到这一点,也许在协议或其他地方?

4

2 回答 2

7

您应该使用-respondsToSelector:来检查委托是否有效:

if ([delegate respondsToSelector:@selector(myDelegateMethod)])
     [delegate myDelegateMethod];

不用担心检查nil,因为您可以向 nil 对象发送消息,但它什么也不做。

于 2012-06-06T22:57:46.757 回答
0

检查委托是否不为空并已实现。

if(delegate && [delegate respondsToSelector:@selector(randomClassDelegateMethod)]) {
   [delegate randomClassDelegateMethod];
}
于 2012-06-06T23:07:25.263 回答