C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – (ConformsToProtocol:\u0026\u0026 RespondsToSelector:)vs just(respondsToSelector:)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当想要在委托对象上调用协议方法时,希望实现相应的协议方法,我看到开发人员首先检查
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的东西:
谢谢

解决方法

如果一个对象绝对必须符合协议,那么你应该这样声明你的对象:
id<MyProtocol> delegate;

这将为任何试图将不符合MyProtocol协议的对象分配给变量/ parameter / property delegate的人生成编译时错误. (他们可以使用显式转换来绕过警告,但是由他们明智地做到这一点.)

您仍然需要检查respondsToSELEctor,以防委托将响应选择器,因为它可能有多种方式. (帽子提示:@Hot Licks)

大佬总结

以上是大佬教程为你收集整理的objective-c – (ConformsToProtocol:\u0026\u0026 RespondsToSelector:)vs just(respondsToSelector:)全部内容,希望文章能够帮你解决objective-c – (ConformsToProtocol:\u0026\u0026 RespondsToSelector:)vs just(respondsToSelector:)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。