iOS 指定某条queue执行代码

2024-04-08  本文已影响0人  LV大树
{
    dispatch_queue_t storageQueue;
    void *storageQueueTag;
}

- (void) init {
        storageQueue = dispatch_queue_create(class_getName([self class]), NULL);
    

    storageQueueTag = &storageQueueTag;
    dispatch_queue_set_specific(storageQueue, storageQueueTag, storageQueueTag, NULL);

}
//get
- (BOOL)autoAllowExternalBinaryDataStorage
{
    __block BOOL result = NO;
    
    dispatch_block_t block = ^{ @autoreleasepool {
        result = self->autoAllowExternalBinaryDataStorage;
    }};
    
    if (dispatch_get_specific(storageQueueTag))
        block();
    else
        dispatch_sync(storageQueue, block);
    
    return result;
}

//set
- (void)setAutoAllowExternalBinaryDataStorage:(BOOL)flag
{
    dispatch_block_t block = ^{
        self->autoAllowExternalBinaryDataStorage = flag;
    };
    
    if (dispatch_get_specific(storageQueueTag))
        block();
    else
        dispatch_sync(storageQueue, block); 
}
上一篇 下一篇

猜你喜欢

热点阅读