2012-10-12 39 views
0

大量數據的我的工作中,通過Web服務接收到大量的數據(例如30K辭典陣列)的應用程序。 我正在使用JSON套件來解析這個大量的數據。獲得響應後,我將這些數據存儲到plist文件中(因爲我想在離線模式下運行應用程序)。崩潰的問題與iPad的

之後我正在訪問使用的NSMutableArray這個數據(具有30K字典)。現在進行進一步計算我使用此陣列,並使用該環路7-8倍進行計算來繪製圖形。

//path = path from which i access the plist 

NSMutableArray *array = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

//where array contains about 30K dictionaries. 

for(int i=0; i<[array count]; i++) { 

    // some calculation formula 
} 

相同循環執行上述循環後稱爲7-8倍。我讀出的數據之後,從plist中因內存問題

我的應用程序崩潰。請幫我解決問題。

+3

你不爲你的問題...發表錯誤的描述提供足夠的情況下,當應用程序崩潰(是否能源部低內存嗎?),郵編如何創建/存儲的數據以及如何處置呢 – Vladimir

+0

是的,你需要發佈錯誤描述和一個骨架代碼(至少),以便我們可以幫助你優化你的代碼。 – Ravi

+1

首先,至少實現對應用程序委託和視圖控制器最小'..DidReceiveMemoryWarning'方法,並記錄他們進入這一事實。 –

回答

0

由於您的問題與內存相關的,你必須儘快釋放內存。我假設你在iOS 6.0中使用ARC。嘗試使用@autoreleasepool中的循環,看看是否有任何區別。如果需要,也可以使用嵌套的@autoreleasepool。

for(int i=0; i<[array count]; i++) { 
    @autoreleasepool { 
     // calculation formula 
    } 
} 

舊的方式;

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
for(int i=0; i<[array count]; i++) { 
     // calculation formula 
} 
[pool drain]; 
+0

我沒有在我的應用程序中使用ARC。但我這是因爲大量的數據和7-8循環與這個大數據。 – Apple

+0

在這種情況下,您可以使用舊方式NSAutoreleasePool。當循環放了幾個NSAutoreleasePool,看看是否有幫助。 – applefreak

+0

如果可能,我建議切換到ARC。它節省了時間和錯誤。 – nielsbot