1

有时当我为 iPhone 编程时,我想知道什么时候必须分配和初始化对象,什么时候不需要。当您使用 UI 控件时,似乎您不必这样做。这是真的吗?为什么?

(假设它们已在视图控制器的 .h 中声明。)

例子:

label1.text = @"Hello";

对比

label1 = [[UILabel alloc] init];
label1.text = @"Hello";

这是因为我使用的是 Interface Builder 吗?如果我要用代码编写我的 GUI,我必须这样做吗?

4

2 回答 2

5

您的困惑是因为 NIB 文件 - NIB 文件基本上是一个冻结的对象图(即有孩子的对象,还有其他孩子等)。当您加载该 NIB 文件时,运行时会您调用所有分配和初始化,以便它们已经创建。

当你想要创建一个之前没有在 NIB 文件中指定的对象时,你需要 alloc/init。

于 2010-02-01T01:56:26.740 回答
2

如上所述,您基本上需要分配/初始化除静态字符串之外的所有对象。即使您使用便捷的方法,例如 +[NSString stringWithFormat:...],在幕后仍然会发生 alloc 和 init。这些方便的方法通常只是执行 alloc 和 init,然后再折腾一个 -autorelease,这样您就不必担心清理。

如果您只是创建一个临时对象,并且有适合的便捷方法,请使用它。如果您希望您的对象留在附近并且有方便的方法,通常可以调用它并添加-retain,或者只使用alloc/init。

显然,如果没有方便的方法,请使用 alloc/init。

于 2010-02-01T01:50:12.093 回答