我已在RandomClassDelegate
和RandomClass.m
中实施了自定义委托RandomClass.h
。现在我需要实现委托变量,并让它调用协议中的方法,如下所示:
[self.delegate randomClassDelegateMethod];
显然,如果从未设置delegate
,则会导致程序崩溃并导致运行时错误。明显的解决方案就是:
if (delegate)
{
[self.delegate randomClassDelegateMethod];
}
但是我想知道这是否是正确的模式,或者是否有更好的方法来执行此操作,可能是在协议中还是在其他地方?
答案 0 :(得分:7)
您应该使用-respondsToSelector:
来检查代表是否有效:
if ([delegate respondsToSelector:@selector(myDelegateMethod)])
[delegate myDelegateMethod];
不要担心检查nil
,因为您可以向nil对象发送消息,它将不执行任何操作。
答案 1 :(得分:0)
检查代表是否为空并实施。
if(delegate && [delegate respondsToSelector:@selector(randomClassDelegateMethod)]) {
[delegate randomClassDelegateMethod];
}