gpt4 book ai didi

objective-c - 协议(protocol)中的 objective-c 初始化

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

昨天一位同事问,为什么我们不应该在协议(protocol)中声明一个 init 方法 (initWith...:(...)) 来强制实现类提供这样的初始化器。我对这个问题感到非常惊讶,据我所知,这是无稽之谈。但我找不到明确的原因,但在协议(protocol)中声明 init 方法会导致实现的灵 active 降低。

能否请您告诉我一个很好的理由,为什么协议(protocol)中应该或不应该有 init 方法?

谢谢!

最佳答案

您在协议(protocol)中定义方法,以便您的代码可以调用其他人实现的方法。您和实现您的协议(protocol)的开发人员之间的“契约(Contract)”如下所示:

  • 定义协议(protocol),
  • 其他人实现您的协议(protocol),
  • 其他人创建一个实现您的协议(protocol)的对象,并将其提供给您,所以
  • 可以在不知道其实现的情况下调用协议(protocol)的方法。

为了调用协议(protocol)的方法,您需要有一个实现它的对象实例。定义协议(protocol)的全部要点是从您的代码中删除关于实现协议(protocol)的类的任何知识:如果您知道您将获得哪个类,您不妨跳过协议(protocol),直接针对该类编程。然而,如果你想调用你的 init,你必须知道类,或者其他人必须传递给你一个 alloc-ed 对象,init 还没有被调用。这两种选择都不是一个好主意 - 第一种会扼杀拥有协议(protocol)的目的,第二种会迫使您的调用者处理部分初始化的对象。

请注意,它不会阻止您在协议(protocol)中使用非init 配置方法:如果所有对象都必须使用特定信息位进行配置,让您的用户实现任何init 他们想要的,并向您的协议(protocol)添加 configureWith:... 方法,让您在不知道其 init 方法的情况下控制配置对象的过程。

关于objective-c - 协议(protocol)中的 objective-c 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810007/

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