2010-10-02 99 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