gpt4 book ai didi

objective-c - 如果协议(protocol)方法被标记为@required,在未实现时,为什么编译器会发出警告而不是错误?

转载 作者:太空狗 更新时间:2023-10-30 03:42:25 25 4
gpt4 key购买 nike

假设:

  • 宣布新协议(protocol)
  • 此协议(protocol)中的方法被标记为@required
  • 类符合协议(protocol)
  • 没有实现协议(protocol)中提到的方法

在编译时,关于这个方法的信息是已知的:即它是必需的,并且这个类和这个类可能扩展的任何其他类都没有实现它。

为什么在这种情况下编译器会发出警告而不是错误?

最佳答案

只有当编译器因为出现严重错误而无法继续时才会发出错误。

在 Objective-C 中调用方法时,方法查找是在运行时完成的,而不是 C++ 在编译期间完成的。在 Objective-C 中,“消息”只是发送给对象,类似于 obj.executeCommand("Hey, can you execute function <name> for me?") 。在 C++ 中,将以类似 obj.<name>() 的方式直接调用对象。在 Objective-C 的情况下,会调用存在的 executeCommand() 方法。在 C++ 的情况下,函数被调用但它不存在。这些是在编译器级别链接的方法,这意味着它们都成为内存地址而不是名称。 executeCommand 变为 0x12345678 但它仍然使用相同的消息 ( "execute function <name>" )。

这可能非常令人困惑,但这与不同语言中方法的实现方式有关。

关于objective-c - 如果协议(protocol)方法被标记为@required,在未实现时,为什么编译器会发出警告而不是错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8549329/

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