在Cocoa中,对于NSObject
s,init
和initialize
不应该是类方法吗?
答案 0 :(得分:3)
+initialize
(它是可选的)来执行类范围的初始化。
-init
执行类的单个实例的初始化,虽然它通常通过在从NSObject派生的类中添加参数来改进(例如:UIView的initWithFrame:
方法)。
由于-init
初始化单个实例(特别是它可以访问实例的变量),因此它不能是类方法。
答案 1 :(得分:1)
来自文档:
运行时向程序中的每个类发送初始化,或者从该类继承的任何类,从程序中发送第一条消息。
这意味着第一次向类发送消息时,无论是alloc
还是某个已定义的类方法,都会在整个应用程序运行时首先调用initialize
一次。与load
相反,可以在项目中包含一个类,但从不点击initialize
。
init
是
由子类实现,在分配了内存之后立即初始化一个新对象(接收者)。
含义,init
纯粹用于初始化类实例。
编辑 -
根据已修改的问题,alloc
会在init
初始化时创建实例,这就是alloc
是类方法而init
是实例方法的原因。