Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 字符串泄漏问题_Iphone_Objective C_Memory Leaks - Fatal编程技术网

Iphone 字符串泄漏问题

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的数组,并输出格式化为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;
}

当我检查仪器中的泄漏时,发现许多字符串对象泄漏。我设法用上述方法解决了这个问题。你能帮我指出我做错了什么吗?

我不相信你在这个方法中泄露了任何字符串。你为什么认为这是应该受到责备的方法?请记住,仪器会告诉您对象是在哪里创建的,但这与泄漏的位置没有多大关系。运行静态分析器以获取更多帮助(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发布的相同代码进行响应。干得好,罗伯。我将用罗伯发布的相同代码回应。干得好,罗伯。