我的代码泄漏但我不确切地知道我做错了什么。简单地说,我有一个函数,它使用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;
}
当我检查仪器中的泄漏时,发现许多字符串对象泄漏。我设法将问题与上述方法隔离开来。能帮助我,指出我做错了什么吗?
答案 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”。但我想你想要这种专门的算法。