我正在编写一个iPad应用程序,它会下载一个相当大的.csv文件,并将该文件解析为存储在Core Data中的对象。该程序不断崩溃,我将它与Allocations性能工具一起运行,并且可以看到它正在耗尽内存。
代码中没有分配或初始化的东西,为什么我要吞噬内存?
谢谢! -Neal
答案 0 :(得分:1)
循环结束后内存占用量是否会缩小?创建和自动释放的对象将在while循环期间保持不变。您可能需要使用NSAutoreleasePool维护自己的自动释放池。
答案 1 :(得分:0)
没有泄漏。但是你要为每个循环分配一个新的数组和字符串,当输入很长时,它会在自动释放池耗尽之前累积。
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:@""];