目标C - init和构造函数之间的区别?

And*_*oid 9 constructor objective-c init

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

Dar*_*ust 23

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

你首先为你的对象分配内存,它被零填充(除了一些你不需要关心的Objective-C内部东西):

myUninitializedObjectPointer = [MyClass alloc];
Run Code Online (Sandbox Code Playgroud)

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

myObjectPointer = [myUnitializedObjectPointer init];
Run Code Online (Sandbox Code Playgroud)

或者在一行中:

myObjectPointer = [[MyClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

在其他语言中,这些init方法称为构造函数,但在Objective-C中,不强制在分配对象时调用"构造函数".调用适当的init方法是你的责任.在C++,C#和Java等语言中,分配和初始化是如此紧密耦合,以至于您无法在不初始化的情况下分配对象.

简而言之:这些init方法可以被认为是构造函数,但只能通过命名约定而不是语言实现.对于Objective-C,它们只是常规方法.

  • +1*allocation*步骤还设置`isa`实例变量,使其指向对象的类. (5认同)