是否存在用于指示同步或异步调用函数块的模式,例如:
- (void)processImage:(UIImage *)image onComplete:(void (^)(NSError *__error))onComplete;
是一个同步处理图像然后在完成后调用onComplete(error)
的函数,但是:
- (void)downloadResourceIDs:(NSArray *)imageIDs onComplete:(void (^)(NSError *__error))onComplete;
是一个异步下载数组中指定的资源并在下载完所有内容后调用onComplete(error)
的函数,但是这不是一个明确的异步回调。例如,我可以在dispatch_semaphore
中使用downloadResourceIDs:onComplete:
来阻止回调发生,直到下载完所有内容。
或者所有函数都应该是同步的,即使函数本身包含异步元素(比如异步下载)和人工强制同步?
答案 0 :(得分:2)
我建议完成块足以传递异步调用。
对于我的钱,第一个界面是可怕的错误。同步调用不需要完成块,也不应该在接口中打开。