代码之家  ›  专栏  ›  技术社区  ›  Rafał Sroka

NSstring泄漏问题

  •  0
  • Rafał Sroka  · 技术社区  · 14 年前

    我的代码泄漏了,但我不知道我到底做错了什么。简单地说,我有一个函数,它接受带有nsstring的数组并输出格式化为csv的nsstring。

    这是我的代码:

    -(NSString*)generateCSVfromArray: (NSMutableArray*) reportEntries {
    
        NSString* accumulator = [NSString stringWithString:@""];
    
        for (NSString* string in reportEntries) {
    
            NSString* temp = [accumulator stringByAppendingString:string];
            accumulator = temp;
    
            if (![string isEqualToString:@"\n"]) {
    
                NSString* temp = [accumulator stringByAppendingString:@";"];
                accumulator = temp;
            }
        }
        return accumulator;
    }
    

    1 回复  |  直到 14 年前
        1
  •  3
  •   Rob Napier    14 年前

    我不相信你在这个方法中泄露了任何字符串。你为什么认为这是应该责备的方法?记住,仪器会告诉你物体是在哪里被创造出来的,但这与它被泄露的地方没有什么关系。运行静态分析器以获得更多帮助(cmd-shift-a)。

    不过,这种方法效率极低。您正在创建大量临时字符串。你可以这样写得更有效率:

    -(NSString*)generateCSVfromArray:(NSArray*)reportEntries {
    
        NSMutableString* accumulator = [NSMutableString string];
    
        for (NSString* string in reportEntries) {
    
            [accumulator appendString:string];
    
            if (![string isEqualToString:@"\n"]) {
                [accumulator appendString:@";"];
            }
        }
        return accumulator;
    }
    

    当然,已经有非常好的csv作者可用。搜索“cocoa csv”,但我想你需要这个专门的算法。