objective-c - Objective C - init 和构造函数之间的区别?

标签 objective-c constructor init

我试图找到 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 来说,它们只是普通的方法。

关于objective-c - Objective C - init 和构造函数之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23878253/

相关文章:

java - 为什么java抽象类中需要Protected构造函数

inheritance - 便利初始化覆盖

ios - Swift:初始化参数未解析

Java添加对象到ArrayList<object>

objective-c - 在 TableView 单元格中使用修饰键进行鼠标跟踪

iphone - 从 CoreData 获取整数?

ios - 自定义图像 slider iOS

java - 具有许多子类的依赖注入(inject)

ios - 使用 init 作为闭包

iphone - 如何在 xcode 4.3 中将项目或库导入 ios 应用程序