1

除了确保在 init 方法执行其初始化之前对象被其超类正确初始化之外,初始化模式的目的是什么。

为什么这是必要的?

当我们有一个具有多个初始化方法的类时,为什么其他人应该调用专用初始化器而不是超类初始化器?

我来自java背景,所以不完全理解这一点 - 我在java中最接近的是单例模式,但其他人调用专用初始化程序的部分对我来说没有意义,因为在java中你有选择而不是你“应该”。

任何人都可以详细说明....thx

4

1 回答 1

2
  1. 初始化模式是必要的,因为super您正在调用其初始化程序的类可以返回任何类型的对象,不一定是该类的实例。例如,它就是这样NSString工作的,它实际上是一组类,它们实现了针对不同使用模式优化的不同类型的字符串。self = [super init]因此,调用NSString后代会使 self 成为一个NSCFString实例。

  2. 在Objective C中有一种称为Designated Initializer的模式。如果类有很多初始化器,则选择其中一个作为指定器,而其他所有的都应该通过调用它来实现,而不是super。这对于正确覆盖子类中的初始化程序很重要,您应该只初始化指定的初始化程序,并且在所有情况下都会调用它(假设您的代码编写得很好并且利用了指定的初始化程序,当然:)

于 2012-01-04T15:32:55.410 回答