我正在尝试在Objective C中找到init和构造函数之间的区别。我不是C开发人员,但我需要将一些Objective C代码转换为Java,实际上我无法理解它们之间的区别的东西。
答案 0 :(得分:23)
在Objective-C中,对象生命的方式分为两部分:分配和初始化。
你首先为你的对象分配内存,它被零填充(除了一些你不需要关心的Objective-C内部东西):
myUninitializedObjectPointer = [MyClass alloc];
下一阶段是初始化。这是通过按惯例以init
开头的方法完成的。你应该出于各种原因(特别是使用ARC时)坚持这个约定,但从语言的角度来看,没有必要这样做。
myObjectPointer = [myUnitializedObjectPointer init];
或一行:
myObjectPointer = [[MyClass alloc] init];
在其他语言中,这些init
方法称为构造函数,但在Objective-C中,未强制在分配对象时调用“构造函数”。您有责任使用适当的init
方法。在C ++,C#和Java等语言中,分配和初始化是如此紧密耦合,以至于你不能在没有初始化的情况下分配对象。
简而言之:init
方法可以被认为是构造函数,但只能通过命名约定而不是语言实现。对于Objective-C,它们只是常规方法。