Проблема с утечкой NSStrings - PullRequest
       1

Проблема с утечкой NSStrings

0 голосов
/ 02 октября 2010

Мой код течет, но я не знаю точно, что я делаю неправильно.Просто у меня есть функция, которая принимает массив с NSStrings и выводит NSString в формате CSV.

Вот мой код:

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

Когда я проверяю утечки в инструментах, оказывается, что многие строковые объектыутечка.Мне удалось выделить проблему с помощью метода, описанного выше.Не могли бы вы помочь мне и указать, что я делаю не так?

1 Ответ

3 голосов
/ 02 октября 2010

Не думаю, что в этом методе вы пропускаете какие-либо строки. Как вы думаете, почему виноват этот метод? Помните, что инструменты скажут вам, где был создан объект, но это не имеет ничего общего с тем, где он просочился. Запустите Static Analyzer для получения дополнительной помощи (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. Поиск "Какао CSV." Но я предполагаю, что вам нужен этот специализированный алгоритм.

...