Parser 中GCD的使用(7)
2020-01-17 本文已影响0人
老猫_2017
ParseManager.m
解析管理
并行队列
// 独写
- (void)loadOfflineStoreWithOptions:(PFOfflineStoreOptions)options {
dispatch_barrier_sync(_offlineStoreAccessQueue, ^{
PFConsistencyAssert(!self->_offlineStore, @"Can't load offline store more than once.");
self->_offlineStore = [[PFOfflineStore alloc] initWithFileManager:self.fileManager options:options];
});
}
- (void)setOfflineStore:(PFOfflineStore *)offlineStore {
dispatch_barrier_sync(_offlineStoreAccessQueue, ^{
self->_offlineStore = offlineStore;
});
}
- (void)setOfflineStore:(PFOfflineStore *)offlineStore {
dispatch_barrier_sync(_offlineStoreAccessQueue, ^{
self->_offlineStore = offlineStore;
});
}
// 多读
- (PFOfflineStore *)offlineStore {
__block PFOfflineStore *offlineStore = nil;
dispatch_sync(_offlineStoreAccessQueue, ^{
offlineStore = self->_offlineStore;
});
return offlineStore;
}
串行队列
// 同步写操作
- (PFEventuallyQueue *)eventuallyQueue {
__block PFEventuallyQueue *queue = nil;
dispatch_sync(_eventuallyQueueAccessQueue, ^{
...
});
return queue;
}
// 没过线程队列,负责独立的事情
- (void)clearEventuallyQueue {
dispatch_sync(_preloadQueue, ^{
dispatch_sync(self->_eventuallyQueueAccessQueue, ^{
[self->_eventuallyQueue removeAllCommands];
[self->_eventuallyQueue pause];
self->_eventuallyQueue = nil;
});
});
}
总结: 该类,创建了大量的队列,每个队列,都有自己的任务,根据需求,在写时独写,读时并发。