![](/img/trans.png)
[英]iPhone .. NSString being released & dealloc — but I cannot tell where or why
[英]why do I see some code where stuff is released in viewDidUnload as opposed to dealloc?
我做過的所有教程都說我在 viewDidUnload 中將東西設置為 nil,然后在 dealloc 中釋放。 但是我被告知這將導致 memory 泄漏,因為 viewDidUnload 在 dealloc 之前被調用,因此我無法釋放任何設置為 nil 的內容。
有人可以幫忙澄清一下嗎?
如果您在viewDidLoad
中創建 object(帶有alloc
和init
),那么您應該在viewDidUnload
中release
它。 原因是有時候會調用viewDidUnload
來保存memory,但是沒有調用dealloc
。 然后,稍后可能會再次調用viewDidLoad
。 一般來說,釋放你在逆方法中分配的任何東西,例如
如果你在init
中分配了一個 object ,然后在dealloc
中釋放它。
如果你在viewDidLoad
中分配了一個 object ,然后在viewDidUnload
中釋放它。
如果你在viewWillAppear
(或viewDidAppear
)中分配了一個 object ,然后在viewWillDisappear
(或viewDidDisppear
)中釋放它。
看看@Sean在上一個SO question中給出的答案。 他在viewDidUnload
中明確說明了發布的目的
實現它的最重要原因之一是 UIViewController 子類通常還包含對視圖層次結構中各種子視圖的擁有引用。 例如,這些屬性可以在從 nib 加載時通過 IBOutlets 設置,或者在 -loadView 中以編程方式設置。
UIViewController 對子視圖的附加所有權意味着即使將其視圖從視圖層次結構中移除並釋放以保存 memory,通過該子視圖也由視圖釋放,它們實際上不會被釋放,因為 Z1559C35B03BC5919 本身仍然包含還擁有對這些對象的未完成保留引用。 釋放 UIViewController 對這些對象的額外所有權確保它們也將被釋放以釋放 memory。
您在此處釋放的對象通常會在重新加載 UIViewController 的視圖時重新創建並再次設置,無論是從 Nib 還是通過 -loadView 的實現。
另請注意,在調用此方法時 UIViewController 的 view 屬性為零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.