当想要在委托对象上调用协议方法时,希望实现相应的协议方法,我看到开发人员首先检查
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的东西:
谢谢