Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa touch 为什么-init是实例方法而+;初始化类方法?_Cocoa Touch_Cocoa_Initialization_Nsobject - Fatal编程技术网

Cocoa touch 为什么-init是实例方法而+;初始化类方法?

Cocoa touch 为什么-init是实例方法而+;初始化类方法?,cocoa-touch,cocoa,initialization,nsobject,Cocoa Touch,Cocoa,Initialization,Nsobject,在Cocoa中,对于NSObjects,init和initialize不应该都是类方法吗?+initialize可以被重写(这是可选的)以执行类范围的初始化。 -init执行类的单个实例的初始化,尽管它通常通过在从NSObject派生的类中添加参数(例如:UIView的initWithFrame:方法)来优化 由于-init初始化单个实例(特别是它可以访问实例的变量),因此它不能是类方法。+initialize可以被重写(可选)以执行类范围的初始化。 -init执行类的单个实例的初始化,尽管它通

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

+initialize
可以被重写(这是可选的)以执行类范围的初始化。
-init
执行类的单个实例的初始化,尽管它通常通过在从NSObject派生的类中添加参数(例如:UIView的
initWithFrame:
方法)来优化


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

+initialize
可以被重写(可选)以执行类范围的初始化。
-init
执行类的单个实例的初始化,尽管它通常通过在从NSObject派生的类中添加参数(例如:UIView的
initWithFrame:
方法)来优化

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

来自文档:

运行时在类或从其继承的任何类从程序中发送其第一条消息之前,向程序中的每个类发送initialize

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

另一方面,
init

由子类实现,以便在分配新对象(接收器)的内存后立即初始化该对象

这意味着,
init
通常用于初始化类实例

编辑--

在编辑的问题之后,
alloc
创建实例,而
init
初始化实例,这就是为什么
alloc
是类方法,
init
是实例方法。

来自文档:

运行时在类或从其继承的任何类从程序中发送其第一条消息之前,向程序中的每个类发送initialize

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

另一方面,
init

由子类实现,以便在分配新对象(接收器)的内存后立即初始化该对象

这意味着,
init
通常用于初始化类实例

编辑--

在编辑的问题之后,
alloc
创建实例,而
init
初始化实例,这就是为什么
alloc
是类方法,
init
是实例方法