2010-02-01 70 views
1

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

(假设他们已经在视图控制器的.h被宣布。)

例子:

label1.text = @"Hello"; 

VS

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

这是因为我使用的接口生成器?如果我要在代码中编写我的GUI,我是否必须这样做?

回答

5

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

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

+0

有趣的是,运行时使用了-initWithCoder :,所以它的行为有点不同,如果你完全用代码实现它。 – Elliot 2011-11-15 16:27:31

2

你基本上需要分配/ init除静态字符串以外的所有对象,如上所述。即使在使用便利方法时,例如+ [NSString stringWithFormat:...],幕后仍然存在alloc和init。这些便捷方法通常只是执行alloc和init,然后抛出一个-autorelease以便您不必担心清理。

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

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

+1

需要注意的一件事是,当他使用界面构建器时,对象将从nib文件分配给他,并且他不必手动执行该操作。 – 2010-02-01 01:51:27

+0

啊,这是一个很好很重要的区别。 – 2010-02-01 01:59:42