美文网首页
Parser 中GCD的使用(7)

Parser 中GCD的使用(7)

作者: 老猫_2017 | 来源:发表于2020-01-17 18:35 被阅读0次

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;
        });
    });
}

总结: 该类,创建了大量的队列,每个队列,都有自己的任务,根据需求,在写时独写,读时并发。

相关文章

网友评论

      本文标题:Parser 中GCD的使用(7)

      本文链接:https://www.haomeiwen.com/subject/eyhhzctx.html