То, как я пытаюсь удалить несколько наборов из 10 000+ NSManagedObjects, требует слишком много памяти (около 20 МБ живых байтов), и мое приложение выбрасывается. Вот реализация метода удаления:
+ (void)deleteRelatedEntitiesInManagedObjectContext:(NSManagedObjectContext *)context
{
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[context setUndoManager:nil];
[fetch setEntity:[NSEntityDescription entityForName:NSStringFromClass(self) inManagedObjectContext:context]];
[fetch setIncludesPropertyValues:NO];
NSError *error = nil;
NSArray *entities = [context executeFetchRequest:fetch error:&error];
NSInteger deletedCount = 0;
for (NSManagedObject *item in entities) {
[context deleteObject:item];
deletedCount++;
if (deletedCount == 500) {
[context save:&error];
deletedCount = 0;
}
}
if (deletedCount != 0) {
[context save:&error];
}
}
Я пробовал: -setFetchBatchSize, но используется еще больше памяти.
Как это можно сделать более эффективно с точки зрения памяти?