8

阅读 Apple关于框架开发人员的技巧和技术的文档,我发现了关于指定初始化程序的声明:

指定初始化程序是调用 init超类方法的类的 init 方法。(其他初始化器调用init 类定义的方法。)每个公共类都应该有一个或多个指定的初始化器。

(强调补充。)

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

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

我只是有点困惑,什么用例或设计模式需要多个指定的初始值设定项?

4

1 回答 1

6

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

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

于 2011-09-21T15:08:44.993 回答