用ARC銷燬物件的正確方法是什麼?用ARC銷燬物件
我想銷燬一些UIViewController
s以及一個在運行期間的特定時間持有AUGraph的對象。
目前,當我的父視圖控制器創建viewcontroller對象並將它們的視圖分配給它的view
時,對象顯然與父對象保持一致。我想在不需要時摧毀這些子視圖控制器。
用ARC銷燬物件的正確方法是什麼?用ARC銷燬物件
我想銷燬一些UIViewController
s以及一個在運行期間的特定時間持有AUGraph的對象。
目前,當我的父視圖控制器創建viewcontroller對象並將它們的視圖分配給它的view
時,對象顯然與父對象保持一致。我想在不需要時摧毀這些子視圖控制器。
只需將引用這些對象的變量設置爲nil
即可。編譯器會在那一刻釋放這些對象,如果沒有其他強引用存在,它們將被銷燬。
非常感謝。有沒有這種「冬眠」視圖控制器的概念,而不是銷燬和重新創建它們? – jarryd 2012-07-12 15:26:39
「冬眠」是什麼意思?只要保持參考,視圖控制器就會停留。只要它的視圖不在屏幕上,只要應用程序收到內存警告(這對您來說也是釋放不需要的內存(如緩存等)的正確情境),它將自行管理其視圖並從內存中卸載它, 。如果我是你,我不會干涉這個過程。 – 2012-07-12 15:37:24
當您將__strong
變量引用對象爲nil
時,ARC將插入對[release]
的調用。
@interface MyViewController : UIViewController {
UIViewController *childViewController;
}
...
@end
-(void)destroyChild {
childViewController = nil;
}
當你有對象的C數組同樣的事情做:你的數組的元素設置爲nil
會釋放在那裏,除非它是__weak
/__unsafe_unretained
的項目。如果將子視圖控制器保留在NSMutableArray
中,則從數組中刪除對象會減少其引用計數。
通常,您可以通過將對象設置爲零來實現此目的。幕後發生的事情是該對象正在由ARC發佈,然後設置爲零。這應該完成你想要的。
在ARC中,當沒有引用保留給它們時,對象會自動釋放。應該沒有必要手動銷燬它們。你是否遇到持續時間比他們應該更長的物體的問題? – 2012-07-12 13:55:43
謝謝。沒有遇到任何問題,但我在mainviewcontroller中有許多子視圖控制器,並addSubview它們的視圖。當這些子視圖不顯示時,我想釋放內存,並根據需要創建一個銷燬它們。 – jarryd 2012-07-12 15:24:54