我正在尝试修复在方法中某处导致的巨大内存泄漏,该方法从 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 经常被调用,所以这个泄漏的影响是相当大的。