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

请您参考如下方法:

在 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 来说,它们只是普通的方法。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!