メソッドのどこかで発生する巨大なメモリリークを修正しようとしています。これは、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は非常に頻繁に呼び出されるため、このリークの影響は非常に大きくなります。