我正在編寫一個iPad應用程序,用於下載一個相當大的.csv文件,並將該文件解析爲存儲在Core Data中的對象。該程序不斷崩潰,我已經與Allocations性能工具一起運行,可以看到它正在耗盡內存。幫助查找內存泄漏
代碼中沒有分配或初始化,爲什麼我會吞噬內存?
謝謝! -Neal
我正在編寫一個iPad應用程序,用於下載一個相當大的.csv文件,並將該文件解析爲存儲在Core Data中的對象。該程序不斷崩潰,我已經與Allocations性能工具一起運行,可以看到它正在耗盡內存。幫助查找內存泄漏
代碼中沒有分配或初始化,爲什麼我會吞噬內存?
謝謝! -Neal
沒有泄漏。但是你要爲每個循環分配一個新的數組和字符串,當輸入非常長時,在自動釋放池可以耗盡之前它將會累積。
while (![scanner isAtEnd]) {
BOOL insideQuotes = NO;
BOOL finishedRow = NO;
NSMutableArray *columns = [NSMutableArray arrayWithCapacity:10];
NSMutableString *currentColumn = [NSMutableString string];
因爲這些都是暫時的變量,你可以只移動他們的循環之外,並重新設置的迭代。
NSMutableArray *columns = [NSMutableArray arrayWithCapacity:10];
NSMutableString *currentColumn = [NSMutableString string];
while (![scanner isAtEnd]) {
BOOL insideQuotes = NO;
BOOL finishedRow = NO;
[columns removeAllObjects];
[currentColumn setString:@""];
循環結束後內存佔用是否縮小?創建和自動釋放的對象將在while循環期間停留。您可能需要使用NSAutoreleasePool維護您自己的autorelease池。
我也會用autorelease池理論。 – 2010-05-11 23:22:02
我是一個總新手,但只是提醒,alloc或init不是整個列表。它是「如果您使用名稱以」alloc「或」new「開頭或包含」copy「(例如alloc,newObject或mutableCopy)的方法創建它,或者如果您發送一個保留信息。」 – 2010-05-11 23:07:21
在我學習的早期階段,我仍然相信,如果遵循規則,你永遠不會陷入困境。有點想看看如何發揮出來。 – 2010-05-11 23:08:21