Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Objective c 目标C-init和构造函数之间的差异?_Objective C_Constructor_Init - Fatal编程技术网

Objective c 目标C-init和构造函数之间的差异?

Objective c 目标C-init和构造函数之间的差异?,objective-c,constructor,init,Objective C,Constructor,Init,我试图找出Objective C中init和构造函数之间的区别。我不是C开发人员,但我需要将一些Objective C代码转换为Java,实际上我无法理解两者之间的区别。在Objective C中,对象的生命方式分为两部分:分配和初始化 首先为对象分配内存,该对象将被零填充(除了一些您不需要关心的Objective-C内部内容): 下一阶段是初始化。这是通过一个按惯例以init开头的方法完成的。出于各种原因(特别是在使用ARC时),您应该遵守此约定,但从语言的角度来看,没有必要这样做 myObj

我试图找出Objective C中init和构造函数之间的区别。我不是C开发人员,但我需要将一些Objective C代码转换为Java,实际上我无法理解两者之间的区别。

在Objective C中,对象的生命方式分为两部分:分配和初始化

首先为对象分配内存,该对象将被零填充(除了一些您不需要关心的Objective-C内部内容):

下一阶段是初始化。这是通过一个按惯例以
init
开头的方法完成的。出于各种原因(特别是在使用ARC时),您应该遵守此约定,但从语言的角度来看,没有必要这样做

myObjectPointer = [myUnitializedObjectPointer init];
或者在一行中:

myObjectPointer = [[MyClass alloc] init];
在其他语言中,这些
init
方法被称为构造函数,但在Objective-C中,在分配对象时不强制调用“构造函数”。调用适当的
init
方法是您的职责。在C++、C语言和java语言中,分配和初始化是紧密耦合的,所以在不初始化对象的情况下,不能分配对象。 简而言之,
init
方法可以被认为是构造函数,但只能通过命名约定而不是语言强制来实现。对于Objective-C,它们只是普通方法。

+1分配步骤还设置了
isa
实例变量,以便它指向对象的类。
myObjectPointer = [[MyClass alloc] init];