obj-c中init模式的用途及其用途

时间:2012-01-04 10:16:02

标签: ios objective-c-2.0 objective-c-runtime

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

为什么这有必要?

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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