美文网首页
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