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 回答