使用帶有NSPrivateQueueConcurrencyType
有必要做任何觸及,或屬於其內performBlock:
或performBlockAndWait:
當使用NSMainQueueConcurrencyType時,是否有必要在performBlock中執行Core Data讀取?
對象是對NSMainQueueConcurrencyType
同一真正的被管理對象的情況下,當據丹尼爾埃蓋特在this question答案嗎?試想一下,在主線程中運行下面的代碼,在一個UIViewController例如:
self.moc = [[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType] autorelease];
//moc setup
__block RHWidget *widget = nil;
[self.moc performBlockAndWait:^{
widget = [(RHWidget *)[self.moc objectWithID:self.widgetObjectID] retain];
}];
self.labelView.text = widget.descriptionString;
[widget release];
是否可以安全使用插件的外塊,因爲我們知道我們是在主線程?或者,它是有必要做到這一點:
__block NSString *description = nil;
[self.moc performBlockAndWait:^{
RHWidget *widget = (RHWidget *)[self.moc objectWithID:self.widgetObjectID];
description = [widget.descriptionString copy];
}];
self.labelView.text = description;
[description release];
做的事情改變,如果有另一個NSManagedObjectContext
在那裏,可能是私有隊列式的,以塊做的工作,推動變化高達self.moc作爲parentContext
?
當然這是一個稍微有點人爲的例子,但是安全地將該小部件傳遞給例如需要訪問部件的某些屬性的模式視圖控制器會很好。我應該傳遞小部件的objectID,並在新視圖控制器中的performBlock:
內重新設定它?
有一篇非常全面的文章[這裏](http://www.cocoanetics.com/2012/07/multi-context-coredata/),它描述了各種方法,包括上下文併發類型和嵌套上下文。 – 2012-09-22 20:40:57