Iphone 字符串泄漏问题
我的代码泄漏,但我不知道我到底做错了什么。简单地说,我有一个函数,它接受带有NSString的数组,并输出格式化为CSV的NSString 这是我的密码:Iphone 字符串泄漏问题,iphone,objective-c,memory-leaks,Iphone,Objective C,Memory Leaks,我的代码泄漏,但我不知道我到底做错了什么。简单地说,我有一个函数,它接受带有NSString的数组,并输出格式化为CSV的NSString 这是我的密码: -(NSString*)generateCSVfromArray: (NSMutableArray*) reportEntries { NSString* accumulator = [NSString stringWithString:@""]; for (NSString* string in reportEntrie
-(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;
}
当我检查仪器中的泄漏时,发现许多字符串对象泄漏。我设法用上述方法解决了这个问题。你能帮我指出我做错了什么吗?我不相信你在这个方法中泄露了任何字符串。你为什么认为这是应该受到责备的方法?请记住,仪器会告诉您对象是在哪里创建的,但这与泄漏的位置没有多大关系。运行静态分析器以获取更多帮助(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”。但我假设您需要这个专用算法。我不相信您在这个方法中泄漏了任何字符串。你为什么认为这是应该受到责备的方法?请记住,仪器会告诉您对象是在哪里创建的,但这与泄漏的位置没有多大关系。运行静态分析器以获取更多帮助(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”。但我想您需要这个专门的算法。我将用Rob发布的相同代码进行响应。干得好,罗伯。我将用罗伯发布的相同代码回应。干得好,罗伯。