我正在尝试修复一个方法中某处导致的巨大内存泄漏,它从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经常被调用,因此这个泄漏的影响非常大。
答案 0 :(得分:2)
如果您是从仪器中找到它的话 - 它会显示泄漏对象的创建位置,而不是泄漏的位置。
这就是说你正在将myArray传递给那些没有正确释放它的东西。您是否在customObjects dealloc中正确发布了数组?