如何检查自定义委托是否已设置?

时间:2012-06-06 22:48:11

标签: iphone ios cocoa-touch delegates

我已在RandomClassDelegateRandomClass.m中实施了自定义委托RandomClass.h。现在我需要实现委托变量,并让它调用协议中的方法,如下所示:

[self.delegate randomClassDelegateMethod];

显然,如果从未设置delegate,则会导致程序崩溃并导致运行时错误。明显的解决方案就是:

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

但是我想知道这是否是正确的模式,或者是否有更好的方法来执行此操作,可能是在协议中还是在其他地方?

2 个答案:

答案 0 :(得分:7)

您应该使用-respondsToSelector:来检查代表是否有效:

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

不要担心检查nil,因为您可以向nil对象发送消息,它将不执行任何操作。

答案 1 :(得分:0)

检查代表是否为空并实施。

if(delegate && [delegate respondsToSelector:@selector(randomClassDelegateMethod)]) {
   [delegate randomClassDelegateMethod];
}