泄漏NSStrings的问题

时间:2010-10-02 14:55:25

标签: iphone objective-c memory-leaks

我的代码泄漏但我不确切地知道我做错了什么。简单地说,我有一个函数,它使用NSStrings获取数组并输出格式为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 个答案:

答案 0 :(得分:3)

我不相信你在这种方法中泄漏任何字符串。为什么你认为这是责备的方法?请记住,Instruments会告诉您对象的创建位置,但这与泄漏的位置无关。运行静态分析器以获得更多帮助(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”。但我想你想要这种专门的算法。