我所做的所有教程都說,我將所有的東西都設置爲無,在viewDidUnload中,然後在dealloc中釋放。不過,我被告知,這將導致內存泄漏,因爲viewDidUnload在dealloc之前被調用,所以我無法釋放任何設置爲零的內容。爲什麼我會看到一些代碼在viewDidUnload中發佈的東西,而不是dealloc?
有人可以澄清?
我所做的所有教程都說,我將所有的東西都設置爲無,在viewDidUnload中,然後在dealloc中釋放。不過,我被告知,這將導致內存泄漏,因爲viewDidUnload在dealloc之前被調用,所以我無法釋放任何設置爲零的內容。爲什麼我會看到一些代碼在viewDidUnload中發佈的東西,而不是dealloc?
有人可以澄清?
如果你創建一個對象(alloc
和init
)在viewDidLoad
,那麼你應該在viewDidUnload
release
它。原因是有時調用viewDidUnload
來節省內存,但不調用dealloc
。然後,以後可能再次調用viewDidLoad
。一般而言,以反向方法釋放你分配的任何東西,例如
如果您分配init
中的對象,然後將其釋放到dealloc
。
如果您在viewDidLoad
中分配了一個對象,然後在viewDidUnload
中釋放它。
如果分配在viewWillAppear
(或viewDidAppear
)的對象,然後在viewWillDisappear
(或viewDidDisppear
)釋放它。
看看@Sean在此前的SO question給出的答案。他明確指出釋放的viewDidUnload
其中一個最重要的原因的宗旨,爲實現 它是 的UIViewController子類通常 也包含在視圖 層次擁有以 各種子視圖引用。這些屬性可能有 通過IBOutlets設置,當從一個筆尖加載 或 以編程方式在-loadView內部時,對於 實例。
通過的UIViewController子視圖 的附加所有權意味着 即使當它的視圖被從 視圖層次結構中移除並釋放到保存 存儲器,通過其子視圖 也由視圖釋放時,它們將 不實際上被釋放,因爲 UIViewController本身仍然包含它自己的優秀保留 對這些對象的引用。 釋放UIViewController的 這些對象的附加所有權 確保它們將被釋放爲 以釋放內存。
,你在這裏釋放的對象是 通常重建,並重新設置時 的UIViewController的觀點是 重新加載,無論是從筆尖或 通過 -loadView的實現。
另請注意,在調用此 方法時,UIViewController的 視圖屬性爲零。
可能的重複[什麼時候應該釋放對象在 - (void)viewDidUnload而不是在-dealloc中?](http://stackoverflow.com/questions/1158788/when-should-i-release-objects- in-voidviewdidunload-rather-in-dealloc) – PengOne 2011-06-08 04:31:49