2010-08-19 75 views
2

關於iPhone內存管理的一個非常基本的問題:iphone內存管理(基本)

說我有一個viewController有幾個子視圖也由viewControllers控制。當我刪除頂部viewController並釋放實例 - 它的孩子會發生什麼?其中所有包含的對象是否也被釋放?

當我在樂器中運行我的應用程序時,我沒有得到任何內存泄漏。但是「所有分配」的價值都在上漲? (我認爲這個值是我的應用程序消耗的整個內存?)

回答

1

視圖控制器在dealloc上發佈其視圖。 Views發佈了關於dealloc的子視圖。發佈不是dealloc。

保留其他視圖控制器的是什麼?如果你的視圖控制器是,那麼你的視圖控制器應該釋放它們。通常這將是一個屬性,所以你可以做self.subViewController = nil。另外,如果你有任何IBOutlets(並且我真的希望你使用這些屬性),你還必須在dealloc中將它們設置爲nil。

發佈你自己的東西。

+0

這讓我有點困惑。當我從超級視圖中使用[self.view remove from superview]從超級視圖中移除視圖時,這個視圖的屬性是從內存中刪除還是仍然存在?在釋放它們之前,我必須將屬性設置爲零嗎? 好像我沒有得到釋放對象和釋放對象之間的區別... – Swissdude 2010-08-19 02:10:15

+0

如果有多個事物保留了一個對象,那麼釋放將不會釋放該對象。只有當保留數低於1時,dealloc實際上纔會完成。 – 2010-08-19 03:21:17

+0

@Urs同樣重要的是要注意[self.view removeFromSuperview]會減少UIViewController視圖屬性的引用計數,但它不會影響UIViewController本身的引用計數。 – RedBlueThing 2010-08-19 05:11:39

1

這取決於你的孩子UIViewControllers被引用。如果它們僅在根視圖控制器中引用(當它們在dealloc上創建並釋放時保留),則它們將在釋放時釋放。如果你有其他的視圖控制器引用(可能來自你的應用程序代理?),那麼只有當這些引用被釋放時纔會被釋放。

可可觸摸NSObjects是引用計數,當它們的retainCount遞減到零時它們被釋放。在對象上調用release時,retainCount遞減。