2010-10-02 64 views
0

我的代码泄漏,但我不知道我到底做了什么错误。简单地说,我有一个函数将NSString和NSString格式化为CSV。泄漏NSStrings问题

这里是我的代码:

-(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; 
} 

当我检查的仪器泄漏事实证明,许多字符串对象泄漏。我设法将问题与上述方法分开。你能帮我指点我做错了什么吗?

回答

3

我不相信你在用这种方法泄漏任何字符串。你为什么认为这是责怪的方法?请记住,乐器会告诉你该物体是在哪里创建的,但这与它泄漏的位置无关。运行静态分析器以获取更多帮助(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”。但我想你想要这个专门的算法。

+0

我打算用Rob发布的代码进行回复。 Rob很好。 – Jordan 2010-10-03 14:09:19