2011-03-24 23 views
2

在我的應用程序中,我保留一個NSMutableDictionary對象,在正常情況下將包含大約400-500個對象,並且在某些情況下可能包含1500-2000個對象。它所包含的對象都是NSMutableArray對象,每個通常含有10-15對象(的NSObject一個簡單的擴展與幾個NSStringNSDate性增加),並且可以包含多達50我的代碼是否超負荷我的iPhone?

通過我的馬桶座圈(假設每個對象有100個字節?),這個大概是低5MB,高端是80MB,所以我不確定這是個好主意。

在iPhone上,您需要多大的結構才能實現某種形式的緩存?

+0

你是否需要內存中的所有這些對象?我儘量保持記憶力低的習慣,但不要過早優化。當你在iPhone上運行它時,你會得到內存警告?嘗試在後臺播放iTunes。我一定會考慮使用分配工具在儀器中運行它。另外,如果它們只是字符串和日期的集合,它們可以很容易地被持久化到核心數據,這將爲您處理大量的內存管理內容。 – MCannon 2011-03-24 23:52:46

+0

@MCannon:用戶通常只需要每次處理30-40個'NSMutableArray'對象,所以我可能會堅持休息(一旦我學會了如何做到這一點)。我試圖瞭解iPhone可以處理多少內存結構的大小,而且問題相對較少。我來自Windows Mobile背景,大約在2006年的WM設備可以處理5 MB結構,所以我假設iPhone至少可以處理這個問題。 – MusiGenesis 2011-03-24 23:59:53

回答

2

鑑於您的內存可能會耗盡20MB(在iPhone 3G上),您將需要重新考慮您的設計。 3G擁有128MB內存,3GS擁有256MB,而iPhone 4擁有512MB,但可用於應用程序的金額較少。當我在3G上工作(並達到極限)時,我發現這個數字浮動在20-25MB左右。

問題是爲什麼你需要同時在內存中的所有對象?您可以將該數據存儲到磁盤,它可能不會減慢應用程序的速度。最好稍微放慢速度,而不是一直達到內存警告閾值,在那裏你可能需要修正該字典的大小或找到你的應用程序崩潰。

2

我肯定會考慮將對象存儲到核心數據中,因爲它會管理及時拉取所需對象,並使其他對象錯誤地訪問,直到數據被訪問。它非常高效,並且有可用的fetchResultControllers使集成更容易。