我正在尝试从磁盘读取文件,将其按行分隔,将其存储到 中NSArray
,然后遍历该数组并对数据执行一些非常基本的操作。但是,如果我使用的是一个很小的文件(大约 5000 行数据,每行一个字),我最终会在循环结束时使用几百兆字节的内存。如果我使用一个非常大的文件(约 200,000 行),我最终会使用几 GB 的内存!为什么会这样?当我将文件加载到数组中时,我应该会看到内存的初始峰值,但是内存使用应该保持相当稳定。我正在使用 ARC,但我不相信它,所以现在我自己做所有的内存管理,我确信我正在释放我在循环中分配的所有临时内容。
NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSScanner *scanner = [NSScanner scannerWithString:fileContents];
NSMutableArray *wordList = [[[NSMutableArray alloc] init] autorelease];
while (![scanner isAtEnd]) {
NSString *line = [[NSString alloc] init];
[scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&line];
[wordList addObject:line];
[line release];
}
return wordList;