当想要在委托对象上调用协议方法时,希望实现各自的协议方法,我看到开发人员首先检查
if([delegate respondsToSelector: @selector(aMethod)])
{
//send message;
}
这样做不是更好甚至更安全吗?:
if([delegate conformsToProtocol:@protocol(MyProtocol)] && [delegate respondsToSelector: @selector(aMethod)])
{
//send message;
}
我知道如果协议方法定义的结构正确,那么委托中不应该有任何冲突或实现可能不是针对/来自 MyProtocol。这样的冲突是牵强的,但我遇到了一个简单声明为 -(void)willStartLogin; 的协议方法定义。我确定您已经可以开始思考并建议这种协议方法有多糟糕,例如,它可能已由委托实现以供个人/内部使用,而不是在 myDelegate 协议下使用。最好这样声明 MyProtocol 的方法: -(void)myObjectWillStartLogin:(MyObject*)myObjectInstance; 以消除任何歧义并使事情变得明显。
我希望我没有遗漏任何只需要检查 respondsToSelector 的东西:谢谢