为什么-init是一个实例方法而且+初始化一个类方法?

时间:2014-02-18 02:25:01

标签: cocoa-touch cocoa initialization nsobject

在Cocoa中,对于NSObject s,initinitialize不应该是类方法吗?

2 个答案:

答案 0 :(得分:3)

可以覆盖

+initialize(它是可选的)来执行类范围的初始化。 -init执行类的单个实例的初始化,虽然它通常通过在从NSObject派生的类中添加参数来改进(例如:UIView的initWithFrame:方法)。

由于-init初始化单个实例(特别是它可以访问实例的变量),因此它不能是类方法。

答案 1 :(得分:1)

来自文档:

  

运行时向程序中的每个类发送初始化,或者从该类继承的任何类,从程序中发送第一条消息。

这意味着第一次向类发送消息时,无论是alloc还是某个已定义的类方法,都会在整个应用程序运行时首先调用initialize一次。与load相反,可以在项目中包含一个类,但从不点击initialize

另一方面,

init

  

由子类实现,在分配了内存之后立即初始化一个新对象(接收者)。

含义,init纯粹用于初始化类实例

编辑 -

根据已修改的问题,alloc会在init初始化时创建实例,这就是alloc是类方法而init是实例方法的原因。