2011-09-19 82 views
1

我有一個相當基礎的應用程序,我正在更新 - 作爲更新的一部分,我正在實施內存警告管理。iOS - 內存管理:這些內存在哪裏?

當內存警告方法被調用時,我釋放所有未使用的視圖控制器(並且這些視圖控制器依次釋放它們的任何對象)。據我所知,一切似乎都正常,沒有泄漏等。

什麼不工作:

使用「分配」的儀器,有大量的內存,當模擬硬件警告被稱爲沒有被釋放。以下是我在測試時所做的:

1 - 啓動應用程序 - 這是以下顯示的原始內存跳轉。

2 - 添加一個新的視圖控制器 - 這是第二個秒殺。

3 - 返回到主視圖控制器並模擬硬件內存警告 - 這是內存中(最小)的內存下降。此警告應完全釋放附加視圖控制器和關聯的對象。

enter image description here

  • 雖然一切都被釋放,有大量的內存剩餘。據我所知,這就像iOS所做的緩存動畫等。然而,在真正的低內存情況下,這應該被釋放,並且不會停留在這裏,因爲這是大部分內存所在。

這個記憶如何被釋放 - 或者我做錯了什麼?任何指針將非常感謝 - 謝謝!

-

編輯:感謝到目前爲止所有的答案!雖然不幸的是我仍然無法解決問題。此外,記憶怪異似乎只發生在使用模態視圖控制器時。

我注意到,我實際上有一個背景加載方法,用於在應用程序啓動時調用的額外視圖控制器,以使事情順利進行。這表明內存中的第二次秒殺完全是由於其他視圖控制器 - 可能是動畫或其他東西?無論如何,問題仍然存在 - 這個額外的內存是用於什麼,我需要時如何釋放它?

我可能會創建一個小型項目,如果它會有所幫助,就會展現出行爲。謝謝:)

+0

使用堆鏡頭 – justin

回答

2

你確定你沒有保留你的UIViewController或它的對象嗎?在釋放控制器後,您不必模擬內存警告以查看分配的減少。 我附上了一張屏幕截圖,顯示了使用UINavigationController三次推送和彈出UIViewController後,我的應用程序的外觀。

Allocating & deallocating

編輯

爲了回答您的評論:UIViewController中屬於UIKit中,而不是線程安全的,這意味着你不應該創建一個在後臺線程。這可能是內存泄漏的原因,因爲它不會被添加到主autorelease池。

+0

感謝您的答案。我管理我的內存有些不同 - 這樣UIViewController就會一直存在,除非我需要在內存不足的情況下襬脫它(這樣視圖的狀態將被保留)。另外,我不是在推控制器 - 而是我呈現的模態視圖。我做了一些試驗,似乎只是模態觀點,這是發生 - 沒有推/爆。也許我做事的方式有問題嗎? –

+0

我也編輯了一些更多信息:) –

+0

我更新了我的答案,以反映您的意見。 – hwaxxer