Qual é a maneira mais eficiente de excluir um grande número (10.000+) objetos no Core Data?
A maneira que eu estou tentando excluir vários conjuntos de 10.000 + NSManagedObjects é muito intensivo de memória (cerca de 20 MB de bytes vivos), e meu aplicativo está sendo descartado. Aqui está a implementação do método delete:
+ (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];
}
}
Eu tentei: -setFetchBatchSize, mas ainda há mais memória usada.
Qual seria uma maneira mais eficiente de fazer isso?