Альтернатива NSPropertyListSerialization? - PullRequest
2 голосов
/ 21 февраля 2011

Есть ли какой-нибудь код, который я могу использовать вместо этого фрагмента кода?

NSString *anError = nil;
 id plist;
 plist = [NSPropertyListSerialization propertyListFromData:rawCourseArray mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&anError];
 if (anError != nil){

  [anError release];
 }

Приведенный выше код вызывает утечку памяти, которую я не могу исправить. Я пытаюсь выпустить ошибку, но безуспешно. Есть ли другой способ сериализации массива в формате plist без утечки?

С уважением, BX

Итак, я отредактировал код, и теперь он выглядит так, но все еще утечка. Это должно быть что-то еще. Я включил цикл после ...

NSError *error = nil;
    id plist;
    plist = [NSPropertyListSerialization propertyListWithData:rawCourseArray options:/*unused*/0
                                                       format:NULL error:&error];
    //NSArray *entries = (NSArray *)d;
    NSArray *entries = (NSArray *)plist;

    //for (eachCourse in rawCourseArray)
    for (NSDictionary *entry in entries) 
    {
             //LOOP
        }

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Метод, который вы используете, устарел и должен быть объявлен устаревшим в соответствии с документами Apple, вы должны использовать propertyListWithData:options:format:error: вместо

Связь

0 голосов
/ 21 февраля 2011

В этом коде нет утечки памяти. Тем не менее, существует потенциальная авария. Вы не должны -release объект ошибки, потому что вы не являетесь его владельцем. Оказывается, у NSPropertyListSerialization ужасный API. Попробуйте вместо этого использовать вариант +[NSPropertyListSerialization propertyListWithData:options:format:error:].

Вы уверены, что здесь есть утечка памяти? Какой минимальный объем кода необходим для воспроизведения утечки?

...