originalImage
ストア内のすべてMedia
のエンティティで名前が付けられたデータ属性を処理したいと考えています。
問題は、自動解放にもかかわらず、 経由でアクセスされるたびにメモリが蓄積されvalueForKey
、最終的にアプリがクラッシュすることです。または、問題である大きな個々の NSData アイテムをロードしている可能性がありますが、Instruments は、最終的にメモリ警告を表示してクラッシュするまで、メモリ使用量の着実な傾斜グラフであることを示しています。
このコードの残りの部分はまだ開始していないので、ここで紹介していない隠しタスクは実行していません。
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Media"
inManagedObjectContext:[self managedObjectContext]];
[request setEntity:entity];
[request setFetchBatchSize:10];
NSArray *mediaItems = [[self managedObjectContext] executeFetchRequest:request error:nil];
for (NSManagedObject *media in mediaItems) {
@autoreleasepool {
[media valueForKey:@"originalImage"];
}
}
編集: 今日、NSManagedObject メディアについて言及するだけでも、このメディア リークを引き起こすのに十分なようです。したがって、valueForKey 行がなくても、リークがあります。私はこれを試しました:
while (i < count) {
@autoreleasepool {
NSManagedObject *media = [mediaItems objectAtIndex:i];
[[self managedObjectContext] refreshObject:media mergeChanges:NO];
NSLog(@"i: %i", i);
i++;
}
}
これもうまくいかず、同じ時点でクラッシュしました。