除了确保在 init 方法执行其初始化之前对象被其超类正确初始化之外,初始化模式的目的是什么。
为什么这是必要的?
和
当我们有一个具有多个初始化方法的类时,为什么其他人应该调用专用初始化器而不是超类初始化器?
我来自java背景,所以不完全理解这一点 - 我在java中最接近的是单例模式,但其他人调用专用初始化程序的部分对我来说没有意义,因为在java中你有选择而不是你“应该”。
任何人都可以详细说明....thx
除了确保在 init 方法执行其初始化之前对象被其超类正确初始化之外,初始化模式的目的是什么。
为什么这是必要的?
和
当我们有一个具有多个初始化方法的类时,为什么其他人应该调用专用初始化器而不是超类初始化器?
我来自java背景,所以不完全理解这一点 - 我在java中最接近的是单例模式,但其他人调用专用初始化程序的部分对我来说没有意义,因为在java中你有选择而不是你“应该”。
任何人都可以详细说明....thx
初始化模式是必要的,因为super
您正在调用其初始化程序的类可以返回任何类型的对象,不一定是该类的实例。例如,它就是这样NSString
工作的,它实际上是一组类,它们实现了针对不同使用模式优化的不同类型的字符串。self = [super init]
因此,调用NSString
后代会使 self 成为一个NSCFString
实例。
在Objective C中有一种称为Designated Initializer的模式。如果类有很多初始化器,则选择其中一个作为指定器,而其他所有的都应该通过调用它来实现,而不是super。这对于正确覆盖子类中的初始化程序很重要,您应该只初始化指定的初始化程序,并且在所有情况下都会调用它(假设您的代码编写得很好并且利用了指定的初始化程序,当然:)