2

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

4

4 回答 4

3

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

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

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

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

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

于 2012-05-22T14:54:28.990 回答
1

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

于 2012-05-22T14:50:23.650 回答
1

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

于 2012-05-22T14:46:02.997 回答
0

我应该覆盖init方法来初始化我的变量吗?

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

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

是的你可以。Apple 建议不要这样做,因为子类可能会覆盖 set 访问器来做一些意想不到的事情。在实践中,这很少成为问题。

于 2012-05-22T14:48:55.357 回答