在Cocoa中,对于NSObject,init和initialize不应该都是类方法吗?
发布于 2014-02-18 02:27:37
可以重写+initialize (它是可选的)来执行类范围的初始化。-init执行类的单个实例的初始化,尽管它通常是通过在派生自NSObject的类中添加参数(例如:UIView的initWithFrame:方法)来改进的。
由于-init初始化单个实例(特别是,它可以访问实例的变量),所以它不能是类方法。
发布于 2014-02-18 02:30:28
从医生那里:
运行时在类或从类继承的任何类从程序内部发送其第一条消息之前,将初始化发送到程序中的每个类。
这意味着当您第一次向类发送消息时,无论是alloc还是某个已定义的类方法,initialize都会首先被调用一次,用于整个应用程序的运行。与load不同的是,可以在项目中包含一个类,而不按initialize。
另一方面,init是
由子类实现,以便在为新对象分配内存后立即初始化新对象(接收方)。
这意味着,init仅用于初始化类实例。
编辑--
在经过编辑的问题之后,alloc在init初始化实例时创建实例,这就是为什么alloc是类方法而init是实例方法的原因。
https://stackoverflow.com/questions/21843183
复制相似问题