2010-08-18 62 views
0

這是一個很奇怪的問題,但我從來沒有真正處理內存分配之前,所以現在我真的很偏執使用它太多或忘記釋放東西。我發現了非常有用的內存泄漏工具(我很自豪地看到這一點,至少目前爲止,我並沒有以這種方式丟失任何東西),而且我假設的分配工具是用於測量有多少內存用完了在任何給定的應用程序運行時間點。但是,我並不確定我應該使用多少內存。iPhone:多少內存使用量太多?

我認爲我的iPod touch中有一個很好的256M,不太清楚,但我不知道系統進程佔用了多少內存,也不知道在啓動之前我可以安全使用多少內存內存問題。目前我的程序佔用大約4 MB,這看起來相當高,但我想至少有一部分是不能停止的系統進程,或者高維護的東西,比如大型圖形背景。使用。

總之,有人能給我一個很好的基準數據,我的應用程序應該針對任何給定時間內使用的最大內存量?如果這些差異顯着,iPhone 4和iPad的數字也會很好。

-Ash

+0

[Memory在iPhone上使用限制]的可能重複(http://stackoverflow.com/questions/3448583/memory-uses-limit-on-iphone) – 2010-08-18 21:37:12

+0

這是一個很常見的問題,正如你可以想象的那樣。上次它出現了,我給了我兩分錢。這是在這裏:http://stackoverflow.com/questions/3448583/memory-uses-limit-on-iphone/3449344#3449344 – 2010-08-18 20:34:09

回答

0

對於最後2天,我分析我的最新的應用程序的內存佔用和我發現一個有趣的事實:

當應用程序收到內存警告,這將釋放的觀點是不目前可見。這會導致我的應用程序崩潰,因爲我沒有考慮到這一點。我原本以爲它是釋放已經被自動釋放的對象,但這是不正確的。

如果我重新啓動手機,它可以在堆中處理高達8MB的數據,而不會有任何警告。我猜在iOS4中,它取決於你在後臺運行多少東西。我在iPhone4上安裝了iOS 4.0.1。

iPad/iPhone 3GS擁有256MB,iPhone4擁有512MB,但並不意味着它的全部可用於一個進程。我記得在iOS 3.0早期,我的一個應用程序被32mb的操作系統終止。

+4

這些不是自動釋放的對象被釋放。自動釋放的對象在釋放自動釋放池時被釋放或釋放。主池在當前運行循環結束時排空,而不是響應內存警告。很可能你看到的是不再在屏幕上顯示的視圖的解除分配(didReceiveMemoryWarning方法中的標準UIViewController響應)。另外,如果使用內存監視器工具,則會看到應用程序的真實大小遠大於您描述的4.5 MB分配。 – 2010-08-18 21:41:42

+0

@Brad你是絕對正確的。它釋放視圖。 – bioffe 2010-08-19 03:44:36

1

沒有硬性答案。有幾點需要注意:

1)如果您的應用程序隨着時間的推移使用越來越多的內存,它將比大多數時候正確釋放內存的應用程序快得多,但會犯一些錯誤。不要忘記,有一個監視程序進程有一個(看似)複雜的殺死應用程序的公式,並且不同的應用程序可能因不同的原因在不同級別的內存使用中被殺死。

2)iPhone4比以前的手機有更多的內存,但用戶多任務,這是真正無禮,只是去鎮內存使用。對於多任務處理來說,保持內存佔用空間較低(這有助於在自己的應用程序處於後臺時,內存越多,使用它的可能性就越大),這比每個處理都重要。 3)嚴肅對待內存警告並轉儲所有可能的東西。它會讓您的應用程序運行更長時間,並再次幫助它在較長時間內保持在後臺運行。