утечка памяти при декодировании NSArray с помощью NSKeyedUnarchiver decodeObjectForKey - PullRequest
1 голос
/ 12 июля 2011

Я пытаюсь исправить огромную утечку памяти, вызванную где-то в методе, который получает объект NSData из хранилища данных CoreData и разархивирует этот NSData обратно в NSArray.

- (CustomObject *) getCustomObject
{
.... get myManagedObject from CoreData Store

    CustomObject *customObject = nil;
    if(myManagedObject)
    {
        customObject = [[[CustomObject alloc] init] autorelease];

        NSData *arrayData = [myManagedObject valueForKey:@"resultArray"];

        /* read and save resultArray */
        NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:arrayData];

        /* per definition decodeObjectForKey returns an autoreleased object */
        /* Instruments (The Profiler) points out this line for the source */
        /* of the memory leak. */
        NSArray *myArray = [unArchiver decodeObjectForKey:@"rArray"];

        /* myArray is a (nonatomic,retain) property in CustomObject */
        [customObject setMyArray:myArray];

        /* finishDecoding and release unarchiver */
        [unArchiver finishDecoding];
        [unArchiver release];
    }

    return customObject;
}

Если я освобождаю myArray (что я не должен делать, так как это автоматически выпущенный объект), утечка памяти исчезает.

Кто-нибудь знает, как можно решить эту проблему? Элементы в NSArray CustomObject являются объектами NSDictionary.

спасибо заранее

edit: - (CustomObject *) getCustomObject вызывается очень часто, поэтому влияние этой утечки довольно велико.

1 Ответ

2 голосов
/ 12 июля 2011

Если вы находите это из Инструментов - это показывает место, где был создан утечек, а не там, где он просочился.

Это говорит о том, что вы передаете myArray чему-то, чтоне выпуская это должным образом дальше по линии.Правильно ли вы освобождаете массив в свой customObjects dealloc?

...