ios - Objective C 中是否需要 init()

标签 ios objective-c init

我是 Objective C 的新手。我很难理解 init() 方法。我在 Apple 网站上阅读了这两行:

  1. NSObject 类中定义的 init() 方法不进行初始化;它只是返回 self 。 ( https://developer.apple.com/reference/objectivec/nsobject/1418641-init )

  2. 您必须使用 init... 方法来完成初始化过程。 ( https://developer.apple.com/reference/objectivec/nsobject/1571958-alloc )

如果“它没有初始化”,我是否需要调用 init() 来初始化对象?为什么?

最佳答案

当使用 +alloc 创建实例对象时,它会获得一个完全设置的基础结构,并且所有 ivar 都设置为 0NULLnil0.0(或任何 ivar 类型的零值)。

如果这对类来说足够了,就没有必要覆盖-init,它可以简单地使用NSObject的init。 (NSObject-init 什么都不做。)这是实现者 的一面。这就是您在 1 中提到的内容)。

该类的用户(即创建实例的代码)必须将init 发送到新创建的实例以给它机会 来初始化自己。这就是你在 2 中提到的内容)。

作为该类的用户,您根本无法知道也不应该知道该类在其初始化过程中是否需要一些代码。所以发送消息,即使它可能毫无用处。

关于ios - Objective C 中是否需要 init(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43566534/

相关文章:

iphone - Xcode 4.5.2 : How to correctly program a CGRectMake?

ios - SceneKit – 应用程序崩溃

objective-c - 尝试在单例中更改变量,但它仍然可以为空

Spring 的初始化和销毁​​方法

python - 我可以在 python 类中有两个 init 函数吗?

javascript - 在 PhoneGap iOs App 中发生 "pause"事件后是否可以访问网络?

java - 将 JavaUtilDate 转换为 NSDate,反之亦然?

ios - 供应商框架的 Cocoapods header 路径

iphone - 向 UIImageView 添加反射的最有效方法是什么

swift - 错误 : Cannot assign to '...' in 'self'