自iOS 5以来,CoreData引入了自己的private queue
,您可以让一些操作(especially save context
)在后台运行。
这必须通过[context performBlock:...]
完成。
对于saving the context
来说,这是非常好的。但是,NSFetchRequest
怎么样?我的意思是,如果我想拿一些东西,并希望在后台拿呢?我不认为[上下文性能Block..]能做到这一点。
有没有新的方法可以做到这一点?
任何涉及NSPrivateQueueConcurrencyType
的NSManagedObjectContext
的内容都应该封装在performBlock
块中。对于想要将托管对象传递回主队列上下文的后台获取,如下所示:(注意,这只是为了说明目的):
// assume self.managedObjectContext is a main queue context
NSManagedObjectContext *backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[backgroundContext performBlock:^{
// do your fetch - e.g. executeFetchRequest
NSManagedObjectID *objID = [someManagedObject objectID];
[self.managedObjectContext performBlock:^{
NSManagedObject *mainManagedObject = [self.managedObjectContext objectWithID:objID];
// do something now with this managed object in the main context
}];
}];