2012-01-29 40 views
1

我只是想知道,如果在我目前有接近任何內存泄漏:視圖和存儲管理的iOS5

我添加多個子視圖一個視圖,且具有定義每個這些子視圖與財產保留關鍵字。當函數viewDidUnload被調用時,我需要將指向這些子視圖的指針設置爲零,或者由於我使用ARC而自動完成。我現在在viewDidUnload函數中沒有做任何事情。

感謝您的澄清!

回答

2

通過在viewDidUnload中無所作爲,您可以保留子視圖,但不會泄漏它們。

泄漏的對象仍在內存中,但您無法觸及它(因爲沒有指針指向它)。這些子視圖不會泄漏,因爲您仍然擁有指向子視圖的指針的視圖控制器對象。當視圖控制器被釋放時,它將釋放子視圖,然後它們將被釋放,不泄漏。 (如果視圖控制器本身成爲泄露,然後子視圖也被泄露。)

然而,你應該放開子視圖中viewDidUnload,通過屬性或實例變量設置爲nil。爲什麼?系統卸載您的視圖,並在內存不足時向您發送viewDidUnload。如果你在viewDidUnload中什麼都不做,那麼當你不需要它們的時候,你會保留那些子視圖對象,佔用內存。

+0

感謝您的明確答案 – tiguero 2012-01-30 00:03:35

+0

嗨Rob - 如果我已經宣佈了一個弱指針IBOutlet視圖我不需要將其指針設置爲零右?這將在viewDidUnload函數後自動完成?我看到一些實現,其中子視圖的引用很弱,所以現在我很困惑,如果我應該使用強屬性來引用子視圖。由於我創建的這些子視圖起初以爲我是這些子視圖的所有者,因此這些引用應該用強大的關鍵字聲明。謝謝! – tiguero 2012-02-18 16:25:56

+0

我有一個新的帖子在這裏分開我的第二個問題:http://stackoverflow.com/questions/9343092/should-all-reference-to-programmactically-created-subviews-declared-as-weak – tiguero 2012-02-18 16:59:30