Sunday, 15 September 2013

CoreData release memory in private moc

CoreData release memory in private moc

I'm using Zarra's way of importing large dataset into CoreData, by using 3
contexts, one is private.
http://www.cocoanetics.com/2012/07/multi-context-coredata/ (the last one).
However the import uses and retains large amount of memory. I tried to add
an autoreleasepool in the process, but it's not sorting effects.
How can I modify this code to save memory during or at the end of the
process? Should I also [temporaryContext reset] at some point?
Thanks for any input, simplified controller code follows:
// import routine
NSManagedObjectContext *temporaryContext = [[NSManagedObjectContext
alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
temporaryContext.parentContext = self.managedObjectContext;
temporaryContext.undoManager = nil;
[temporaryContext performBlock:^{
@autoreleasepool {
// Perform operations, create, update, delete and finally save.
[temporaryContext save:nil];
}
[self.managedObjectContext performBlock:^{
[self.managedObjectContext save:nil];
[self.privateWriterContext performBlock:^{
[self.privateWriterContext save:nil];
self->refreshInProgress = NO;
dispatch_async(dispatch_get_main_queue(), ^{
[self.refreshControl endRefreshing];
});
}];
}];
}];

No comments:

Post a Comment