2012-08-10 207 views
1

我是IOS新手,來自個人電腦我想嘗試管理內存和電池資源。IOS內存和電池管理 - 內存vs工作

我有一個UIImageView的子類是非常輕的(這是一個圖像佔位符與一些方法)。此子類重複添加到幾個根視圖並從中移除。我在每個根視圖上持有對子類的IBOutlet引用。

請問你:

  • 只需添加/刪除從根視圖的子類(並保持它在內存中)?

或者

  • 創建和每次(釋放內存,但額外的工作)銷燬子類的實例?

這是值得考慮還是我擔心什麼都沒有?

如果UIImageView子類非常大,你的答案是否一樣?

有沒有辦法衡量這些事情?

+0

我會說保持實例,因爲你反覆使用它。如果您真的擔心,可以隨時在儀器中對您的應用進行配置以查找任何泄漏,並且如果它位於設備上,仍然可以使用儀器來測量電池消耗。 – CBredlow 2012-08-10 13:08:03

回答

0

我會去你的第一個選項,保存在內存中。這只是因爲我認爲保留我的觀點並重用它們非常方便。這意味着他們會記住他們的狀態和內容,並且在很多情況下都有幫助。我通常編寫方法來重置內容或在需要時刷新它。

將其保存在內存中也可能會稍微增加視圖的加載,但通常您不會注意到這種差異,並且我看到有人使用這兩種方法。

是的,我會說你有點擔心,特別是如果你認爲這個決定會影響電池。

關於內存管理,只要您只使用一個imageview,就可以將imageview保存在內存中或釋放/重新創建內存。唯一的區別是,如果您正在重新創建它,則會重複分配並釋放它。

但是,如果您在用戶每次打開它們時都開始創建新的圖像瀏覽並且從不放開它們,但是這意味着您在編程中正在做一些根本性錯誤。

只要你知道你在做什麼,不需要擔心這種情況下的內存量 - 這裏有很多。如果您正在處理大圖像,請開始擔心。

特別是如果您使用ARC,則無需擔心,只需開始黑客入侵即可。如果你手動管理內存,我建議嘗試重用,因爲這會導致更少的頭痛和巨大的泄漏風險。在這種情況下,使用leaktools和分析工具來確保。

2

一般而言,您可以在iOS上無視使用UIImageViewUIImageView並不僅僅是一個裁剪區域,其中有一些處理圖像的方法。

佔用更多內存的資源是UIImageView包含的UIImage,這些資源由iOS緩存。

因此,創建UIImageViews並銷燬它們幾乎沒有成本,只要注意你將它們釋放並且不會泄漏內存,除非你有數百個內存,否則你應該沒問題。

「大」的子類並不重要,一個類中的代碼永遠不會加載多次。如果這個班有很多額外的狀態 - 這將佔用一些記憶,但我不能在UIImageView中形成一大堆。

1

你最好把它留在記憶裏。如果您不通過不斷重新創建圖像視圖來減慢設備速度,用戶體驗會更好。一個單一的可憐的UIImageView實例的內存不夠大,無法花費時間和精力來進行所有時間恢復。

1

保持記憶力以提高性能並沒有你想象的那麼大 - 從其他答案中獲得。但是,如果您收到內存警告,則應將其從內存中移除,並提供一種方法根據需要使其恢復正常。