1

メソッドのどこかで発生する巨大なメモリリークを修正しようとしています。これは、CoreDataデータストアからNSDataオブジェクトを取得し、その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を解放すると(自動解放されたオブジェクトであるため、実行すべきではありません)、メモリリークはなくなります。

この問題を解決する方法を知っている人はいますか?CustomObjectのNSArrayの項目は、NSDictionaryオブジェクトです。

前もって感謝します

編集:-(CustomObject *)getCustomObjectは非常に頻繁に呼び出されるため、このリークの影響は非常に大きくなります。

4

1 に答える 1

2

Instruments からこれを見つけている場合は、リークされたオブジェクトではなく、リークされたオブジェクトが作成された場所を示しています。

これが言っているのは、myArray を適切に解放していないものに渡しているということです。customObjects dealloc で配列を適切に解放していますか?

于 2011-07-12T14:17:44.600 に答える