【问题标题】:Where should I initialize variables in objective c?我应该在哪里初始化目标 c 中的变量?
【发布时间】:2012-05-22 14:38:59
【问题描述】:

在目标 c 中,我应该覆盖 init 方法来初始化我的变量吗?如果变量是属性,我仍然可以通过通常的方式访问它们来设置它们的初始值吗?

【问题讨论】:

  • 您应该用自己的方法覆盖init 方法(如果您使用init),但始终在您自己的主体之前调用super 版本。如果您正在编写视图控制器,则可以在 viewDidLoad 中初始化变量。初始化变量时可能(或可能不)很重要。

标签: objective-c ios xcode


【解决方案1】:

在目标c中,我应该覆盖init方法来初始化我的变量吗?

是的。具体来说,指定的初始化程序。

您的子类还可以指定另一个构建阶段(例如 viewDidLoad)。此外,对象的内存在分配时会清零,因此您无需将它们显式设置为 0/nil(除非您发现它更具可读性)。

如果变量是属性,我仍然可以通过通常的方式访问它们来设置它们的初始值吗?

您应该避免使用对象的实例方法/访问器,并在部分构造的状态下直接访问 ivars(尤其是初始化程序和 dealloc)。您需要避免一些副作用 - Example Here;

【讨论】:

    【解决方案2】:

    您可以在视图控制器的 viewDidLoad 方法中初始化变量。

    【讨论】:

      【解决方案3】:

      类接口中声明的变量将自动初始化为默认值,0 表示整数值,nil/NULL 表示类和指针。如果您需要将变量初始化为其他值,那么您需要为您的类覆盖一个有保证的入口点。例如,从NSObject 继承的自定义类将简单地覆盖init。如果您正在使用从NIB 文件加载的视图控制器,那么您可以覆盖initWithCoder:– awakeFromNib。您应该始终检查您从哪个类继承的文档并找到该类的指定初始化程序。有时您需要设置一个通用的初始化方法并从各种初始化程序中调用它。此外,如果您有一个也是属性的变量,建议您应该设置属性而不是直接设置变量。

      【讨论】:

      • 此外,如果您有一个也是属性的变量,建议您应该设置属性而不是直接设置变量。为什么??
      【解决方案4】:

      我应该重写 init 方法来初始化我的变量吗?

      实例变量:是的,尽管它们已经默认初始化为 0/nil/false。

      如果变量是属性,我仍然可以通过通常的方式访问它们来设置它们的初始值吗?

      是的,你可以。 Apple 建议不要这样做,因为子类可能会覆盖 set 访问器来做一些意想不到的事情。实际上,这几乎不是问题。

      【讨论】:

        猜你喜欢
        • 2019-04-08
        • 2016-03-26
        • 2021-01-29
        • 2011-02-12
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 2023-01-20
        • 1970-01-01
        相关资源
        最近更新 更多