2010-02-01 72 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