在Objective-C中,
init
方法(即类的指定初始化器)和initialize
方法有什么区别?哪些初始化代码应该放在每个方法中?init
方法(即类的指定初始化器)和initialize
方法有什么区别?哪些初始化代码应该放在每个方法中?-init
是一个实例方法,用于初始化特定的对象。而 +initialize
是一个类方法,在创建该类的任何实例以及运行其他类方法之前运行。通常情况下,你不会经常使用 +initialize
,但是它可以方便地设置类作为整体可能使用的静态变量,或确保在创建任何实例之前满足某些条件。
关于应该放在 -init
方法中的代码,在实现初始化器部分的 Objective-C 编程语言 文档中有详细介绍。 在同一文档的Class Objects 部分也讨论了初始化类(即 +initialize
)及其原因。放在 +initialize
中的代码通常与需要初始化的类的特殊功能密切相关。在任何类方法中,包括 +initialize
中,有一件重要的事情要记住,即类方法中的 self
指的是类本身,而不是类的实例。
+initialize
方法)。实际上,您可以创建一个类的实例,而无需向该类发送消息(使用其创建实例方法的IMP
(通常为+allocWithZone:
,但这可能会有所不同))。 - user142019+initialize
方法中写上if (self == [NameOfClass class])
这句代码,为什么要这样检查呢?我知道这与+initialize
方法会在父类中被调用两次有关,但是我不太清楚。谢谢帮助! - makaed+initialize
方法,但单个实现可能会被调用多次 - 一次是在它所在的类中,其他还有每个没有提供自己的+initialize
方法的子类中。 - Caleb