代码之家  ›  专栏  ›  技术社区  ›  Neal L

帮助查找内存泄漏

  •  1
  • Neal L  · 技术社区  · 16 年前

    我正在编写一个ipad应用程序,它下载一个相当大的.csv文件,并将该文件解析为存储在核心数据中的对象。程序不断崩溃,我已经将它与分配性能工具一起运行,可以看到它正在耗尽内存。

    代码中没有分配或初始化的内容,所以为什么我要占用内存?

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

    谢谢! -尼尔

    2 回复  |  直到 16 年前
        1
  •  0
  •   kennytm    16 年前

    没有泄漏。但是,您要为每个循环分配一个新的数组和字符串,在自动释放池耗尽之前,这些数组和字符串将在输入很长时间后累积。

    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:@""];
    
        2
  •  1
  •   MrHen    16 年前

    循环结束后内存占用是否会收缩?创建和自动释放的对象将在while循环期间保留。您可能需要使用nsautoreleasepool维护自己的自动释放池。