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

Parser 中GCD的使用(2)

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

    PFFileObject 一种存储对象类型,文件,image, vidoe ,binary data等。

    PFFileState 文件状态,记录文件的类型,名字,ulr。

    PFAsyncTaskQueue 在串行队列中,采用异步的方式,来执行任务。

    // 创建串行队列
    _syncQueue = dispatch_queue_create("com.parse.asynctaskqueue.sync", DISPATCH_QUEUE_SERIAL);
    
    // 串行队列中,异步执行
    - (BFTask *)enqueue:(BFContinuationBlock)block {
        BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource];
        dispatch_async(_syncQueue, ^{
            ...
        });
        return source.task;
    }
    
    
    // 串行队列执行 block
    - (void)_performDataAccessBlock:(dispatch_block_t)block {
        PFThreadsafetySafeDispatchSync(_synchronizationQueue, block);
    }
    
    - (NSString *)name {
        __block NSString *name = nil;
        [self _performDataAccessBlock:^{
            name = self.state.name;
        }];
        return name;
    }
    
    - (NSString *)url {
        __block NSString *url = nil;
        [self _performDataAccessBlock:^{
            url = self.state.secureURLString;
        }];
        return url;
    }
    
    
    // 异步到UI 返还主队列
    - (void)_performProgressBlockAsync:(PFProgressBlock)block withProgress:(int)progress {
        if (!block) {
            return;
        }
    
        dispatch_async(dispatch_get_main_queue(), ^{
            block(progress);
        });
    }
    
    
    // 采用信号量来保持 异步执行完毕 
    - (BOOL)save:(NSError **)error {
        return [[[self saveInBackground] waitForResult:error] boolValue];
    }
    
    - (NSData *)getData:(NSError **)error {
        return [[self getDataInBackground] waitForResult:error];
    }
    
    - (NSInputStream *)getDataStream:(NSError **)error {
        return [[self getDataStreamInBackground] waitForResult:error];
    }
    
    

    相关文章

      网友评论

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

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