gpt4 book ai didi

ios - 什么时候一个类会有多个指定的初始化程序?

转载 作者:可可西里 更新时间:2023-11-01 03:12:04 24 4
gpt4 key购买 nike

通读 Apple 关于 Tips and Techniques for Framework Developers 的文档,我遇到了关于指定初始化程序的声明:

A designated initializer is an init method of a class that invokes an init method of the superclass. (Other initializers invoke the init methods defined by the class.) Every public class should have one or more designated initializers.

(强调已添加。)

根据我的理解——事实上,正是“指定”这个词的使用——一个类应该只有一个指定的初始值设定项。但根据文档,多个指定的初始化器是可以接受的。

假设您有两个(或更多)指定初始化器,它们的作用是调用父类(super class)的指定初始化器以保证正确的对象初始化。但是,如果两个指定构造器都在调用同一个父类(super class)的指定构造器,那么为什么一开始就需要多个构造器呢?是否应该重构该类以将所有其他 init 方法汇集到单个指定的初始化程序?

我对什么用例或设计模式会调用多个指定的初始化程序感到有点困惑?

最佳答案

当你想对同一类的不同对象进行不同的初始化时,你会这样做。一个例子是类集群,比如 NSNumber。对于它们可以容纳的不同类型的数字,它有很多初始化器。为了提供最准确的表示,该类应该以与接收它时相同的格式保存它的值,而不是强制转换。这意味着初始化器不能简单地调用公共(public)初始化器并返回。他们需要做一些定制工作。这使它们成为指定的初始化器。

另一个例子是一个文档类,它只需要对新文件进行一些初始化,而只对打开的文档进行一些其他初始化。这两个初始化器都将调用它们的 super 实现,后者又调用普通的 init 方法来进行公共(public)初始化。但是,由于它们不仅仅是简单地使用默认值调用另一个构造器,因此它们被视为指定构造器。

关于ios - 什么时候一个类会有多个指定的初始化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7501965/

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