帮助发现内存泄漏

时间:2010-05-11 20:29:24

标签: iphone objective-c memory memory-leaks ipad

我正在编写一个iPad应用程序,它会下载一个相当大的.csv文件,并将该文件解析为存储在Core Data中的对象。该程序不断崩溃,我将它与Allocations性能工具一起运行,并且可以看到它正在耗尽内存。

代码中没有分配或初始化的东西,为什么我要吞噬内存?

代码:http://pastie.org/955960

谢谢! -Neal

2 个答案:

答案 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:@""];