如果您只是需要序列化您的訪問權限,則可以正好使用新的託管上下文架構(專用隊列)。
您定義的管理對象上下文,像這樣:
NSManagedObjectContext* context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
context.persistentStoreCoordinator = coordinator;
//any other initialization you need
[ContextProvider setWorkerContext:context];
這方面將使用GCD後臺線程操作。
您需要保留此上下文(例如,在您的應用程序委託或任何其他對您有意義的地方,只要您需要時可以訪問它)。
此上下文現在可以用作所需操作的隊列(您可能可以在沒有NSOperations的情況下完成所需操作)。
要發出一個任務,你只需調用隊列:
[[ContextProvider workerContext] performBlock:^{//do something asynchronously
//Do whatever you need to do
//The context will serialize tasks in the order they were queued
//You will probably want to save at the end of each task.
}];
您可以添加包裝調用完成塊,如果你喜歡,還是聽上下文更改/保存事件。
如果您需要依賴任務之間的依賴關係,或者您希望能夠以方便的方式取消任務(您仍然需要檢查任務是否被取消),您將需要NSOperation
和NSOperationQueue
,但是您將很可能需要不止一個上下文。
在任何情況下,只有一個上下文可以在任何給定時刻寫入存儲器(寫入時存儲器是串行的),其他寫入/讀取上下文將在寫入期間被阻止訪問存儲器。