我有一种方法可以进行一些广泛的数据提取,我喜欢在后台执行。但是,我需要在块完成之前返回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];
});
});
如何将完成检查方面纳入此内容?
答案 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 希望这会有所帮助。