gpt4 book ai didi

ios - id myObj vs if([obj 类]符合ToProtocol :@protocol(MyProtocol) )

转载 作者:行者123 更新时间:2023-12-01 17:19:32 24 4
gpt4 key购买 nike

在 Objective-C 中,哪种编码方式更好?

//版本 #1

id obj<MyProtocol>;
[obj myMessage];

//版本 #2
   id obj;
if( [[obj class] conformsToProtocol:@protocol(MyProtocol)] )
[obj myMessage];

出于某种原因,我在示例代码中看到了版本 1,但对我而言,版本 2 似乎更安全。
如果在运行时从不符合协议(protocol) MyProtocol 的通用 id 分配 obj 会发生什么?

最佳答案

第一个是编译时检查。

第二个是运行时检查。

Isaac 对“两者都做”的回答当然是可行的,但协议(protocol)一致性检查在某些时候在某些地方有很大的开销(警告;过早的优化等等)。同样,协议(protocol)确实支持@optional 方法。

我建议使用编译时协议(protocol)检查(即声明性、精确性、接口(interface)和使用)以及 respondsToSelector:在运行时。这将实现与 @optional 之间的转换。/@required随着代码的重构和respondsToSelector: 更容易真的很快。

关于ios - id myObj<MyProtocol> vs if([obj 类]符合ToProtocol :@protocol(MyProtocol) ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com