用于指定函数块是异步还是同步的模式

时间:2013-04-23 00:38:04

标签: ios objective-c multithreading objective-c-blocks grand-central-dispatch

是否存在用于指示同步或异步调用函数块的模式,例如:

- (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:来阻止回调发生,直到下载完所有内容。

或者所有函数都应该是同步的,即使函数本身包含异步元素(比如异步下载)和人工强制同步?

1 个答案:

答案 0 :(得分:2)

我建议完成块足以传递异步调用。

对于我的钱,第一个界面是可怕的错误。同步调用不需要完成块,也不应该在接口中打开。