后台线程中的完成块

时间:2014-08-17 18:18:51

标签: ios objective-c objective-c-blocks

我有一种方法可以进行一些广泛的数据提取,我喜欢在后台执行。但是,我需要在块完成之前返回UIBezierPath,然后再向前移动。

我试图这样做:

__block UIBezierPath *blockWavePath = nil;

dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(backgroundQueue, ^{

    dispatch_async(dispatch_get_main_queue(), ^{
        blockWavePath = [pathGenerator createPathWithAsset:audioAsset andSize:myCell.waveView.bounds.size];
    });
});

如何将完成检查方面纳入此内容?

1 个答案:

答案 0 :(得分:0)

我认为你应该在这里使用完成块,完成块用于回调代码。就像你想要在一些工作完成后做某事一样。

在你的情况下,它应该是这样的

dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(backgroundQueue, ^{

    dispatch_async(dispatch_get_main_queue(), ^{
        [self createPathWithAsset:audioAsset andSize:0 completionBlock:^(UIBezierPath* resultValue){
            blockWavePath = resultValue;
        }];
    });
});

createPathWithAsset应该如下所示

-(void) createPathWithAsset: (AVAsset *) asst  andSize : (NSInteger) Size completionBlock: (void (^) (UIBezierPath *)) completionB {


    UIBezierPath *someBezeirPathObject;   //example object
    //Your function implementation goes here
    //.
    //.
    //.


    //When your functionality is achieved, pass the object to completion block
    completionB(someBezeirPathObject);


}

为了更好地理解完成块,我建议this 希望这会有所帮助。