2012-07-12 56 views
4

用ARC銷燬物件的正確方法是什麼?用ARC銷燬物件

我想銷燬一些UIViewController s以及一個在運行期間的特定時間持有AUGraph的對象。

目前,當我的父視圖控制器創建viewcontroller對象並將它們的視圖分配給它的view時,對象顯然與父對象保持一致。我想在不需要時摧毀這些子視圖控制器。

+1

在ARC中,當沒有引用保留給它們時,對象會自動釋放。應該沒有必要手動銷燬它們。你是否遇到持續時間比他們應該更長的物體的問題? – 2012-07-12 13:55:43

+0

謝謝。沒有遇到任何問題,但我在mainviewcontroller中有許多子視圖控制器,並addSubview它們的視圖。當這些子視圖不顯示時,我想釋放內存,並根據需要創建一個銷燬它們。 – jarryd 2012-07-12 15:24:54

回答

12

只需將引用這些對象的變量設置爲nil即可。編譯器會在那一刻釋放這些對象,如果沒有其他強引用存在,它們將被銷燬。

+0

非常感謝。有沒有這種「冬眠」視圖控制器的概念,而不是銷燬和重新創建它們? – jarryd 2012-07-12 15:26:39

+1

「冬眠」是什麼意思?只要保持參考,視圖控制器就會停留。只要它的視圖不在屏幕上,只要應用程序收到內存警告(這對您來說也是釋放不需要的內存(如緩存等)的正確情境),它將自行管理其視圖並從內存中卸載它, 。如果我是你,我不會干涉這個過程。 – 2012-07-12 15:37:24

3

當您將__strong變量引用對象爲nil時,ARC將插入對[release]的調用。

@interface MyViewController : UIViewController { 
    UIViewController *childViewController; 
} 
... 

@end 

-(void)destroyChild { 
    childViewController = nil; 
} 

當你有對象的C數組同樣的事情做:你的數組的元素設置爲nil會釋放在那裏,除非它是__weak/__unsafe_unretained的項目。如果將子視圖控制器保留在NSMutableArray中,則從數組中刪除對象會減少其引用計數。

1

通常,您可以通過將對象設置爲零來實現此目的。幕後發生的事情是該對象正在由ARC發佈,然後設置爲零。這應該完成你想要的。