【发布时间】:2011-05-31 17:52:06
【问题描述】:
在 Objective-C 中,init 方法(即类的指定初始化程序)和initialize 方法有什么区别?每个应该放什么初始化代码?
【问题讨论】:
标签: objective-c initialization init initializer
在 Objective-C 中,init 方法(即类的指定初始化程序)和initialize 方法有什么区别?每个应该放什么初始化代码?
【问题讨论】:
标签: objective-c initialization init initializer
-init是一个实例方法,用来初始化一个特定的对象。 +initialize 是一个类方法,在创建该类的任何实例之前以及运行其他类方法之前运行。 +initialize 不是您大部分时间使用的东西,但它可以方便地设置整个类可能使用的任何静态变量,或者确保在创建任何实例之前满足某些条件。
-init 方法中的代码在The Objective-C Programming Language 的Implementing an Initializer 部分进行了详细描述。还有一些关于初始化类(即+initialize)的讨论,以及为什么您可能需要在同一文档中的Class Objects 部分中这样做。进入+initialize 的代码通常与类的特殊功能紧密相关,需要您首先对其进行初始化。在+initialize(以及任何类方法中)中要记住的重要一点是,类方法中的self 指的是类本身,而不是类的实例。
【讨论】:
+initialize 方法)。实际上,您可以在不向该类发送消息的情况下创建一个类的实例(使用它的 create-instance 方法的IMP(通常是+allocWithZone:,但这可能会有所不同)。
+initialize方法中看到if (self == [NameOfClass class]),为什么我们需要检查呢?我知道这与 +initialize 方法在父类上被调用两次有关,但我不清楚。任何帮助表示赞赏!
+initialize 每个类只调用一次,单个实现也可能会被调用多次——一次用于它所在的类,一次用于每个不提供的子类它是自己的+initialize 方法。
对于 Java 开发人员来说,init 类似于构造函数,而 initialize 类似于类上的静态块。
【讨论】: