2012-09-05 32 views
1

viewDidUnload我在那裏設置IBOutlets爲零,我也設置NSString對象爲零。這些是(nonatomic,strong)。將NSString對象設置爲零是否有意義?將NSString對象設置爲零是否有意義?

+1

您使用ARC嗎? – woz

+0

看到這個問題:http://stackoverflow.com/questions/1210776/objective-c-difference-between-setting-nil-and-releasing – buildsucceeded

+0

是的,我正在使用ARC。 – NCFUSN

回答

0

-viewDidUnload僅用於釋放在-viewDidLoad-loadView中創建的對象,包括IBOutlets。

如果您沒有在-loadView-viewDidLoad中分配這些字符串,那麼在-viewDidUnload中釋放它們是錯誤的。

+0

這些字符串是我的實例變量。 – NCFUSN

+0

IButlets呢?他們是在「viewDidUnload」方法中創建的嗎? – harshitgupta

0

如果您手動管理內存,那麼您不必將出口本身設置爲零,只有與其鏈接的對象。

舉例來說,如果你有@property (nonatomic,strong)IBOutlet UIImageView *imageView;

你只需要設置圖像以零 - imageView = nil;

+0

ARC與viewDidUnload – jrturton

+0

無關@jrturton感謝您打電話給我,我不知道我在想什麼。 –

1

viewDidUnload,而它仍然存在,應該被用來刪除任何東西,你可以重新在loadViewviewDidLoad中創建。

如果字符串屬性是您的視圖控制器的模型的一部分,並且無法重新創建,則不要刪除它們。

該方法不保證被調用 - 它只會在視圖控制器不在屏幕上時調用,但系統受到內存壓力。它不像viewWillAppearviewDidDisappear。它不應該與您的視圖控制器的方法相混淆。

3

請注意,您沒有設置任何對象nil。你所做的設置爲nil指針到你的一個對象,所以它不會指向任何東西。

這意味着如果其他對象中的其他實例變量指向您的字符串,它們將不會在對象中看到任何區別 - 它們仍將指向同一個舊字符串,並且具有相同的未更改內容。

但是,要回答你的問題:它確實對你的變量nil有意義,但是如果和當你的視圖控制器被解除分配時,那麼實例變量也將被解除分配。所以如果你的琴絃很小,可能不需要nil他們在viewDidUnload

相關問題