Я пытаюсь исправить огромную утечку памяти, вызванную где-то в методе, который получает объект 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 вызывается очень часто, поэтому влияние этой утечки довольно велико.