我何时使用Objective-C在iPhone编程中分配和初始化对象?

时间:2010-02-01 01:44:45

标签: iphone xcode sdk uilabel

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

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

示例:

label1.text = @"Hello";

VS

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

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

2 个答案:

答案 0 :(得分:5)

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

当你想要创建一个先前未在NIB文件中指定的对象时,那就是你需要alloc / init的时候。

答案 1 :(得分:2)

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

如果您只是创建一个临时对象,并且有一种方便的方法,请使用它。如果你想让你的对象留在那里并且有方便的方法,通常可以调用它并添加-retain,或者只使用alloc / init。

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