ios - 指定函数 block 是异步与同步的模式

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

是否有一种模式可以指示函数的 block 是同步调用还是异步调用,例如:

- (void)processImage:(UIImage *)image onComplete:(void (^)(NSError *__error))onComplete;

是一个函数,它将同步处理图像,然后在完成后调用onComplete(error),但是:

- (void)downloadResourceIDs:(NSArray *)imageIDs onComplete:(void (^)(NSError *__error))onComplete;

是一个函数,它将异步下载数组中指定的资源,并在下载完所有内容后调用 onComplete(error),但并不能立即明显看出这是一个异步回调。例如,我可以在 downloadResourceIDs:onComplete: 中使用 dispatch_semaphore 来防止回调发生,直到下载完所有内容。

或者,即使函数本身包含异步元素(例如异步下载内容)并人为地强制同步,所有函数都应该同步吗?

最佳答案

我建议完成 block 足以传达异步调用。

就我的钱而言,第一个界面是非常错误的。同步调用不需要完成 block ,也不应该在界面中出现。

关于ios - 指定函数 block 是异步与同步的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16159037/

相关文章:

iOS/Xcode : Group overlapping elements in Stack View

multithreading - Masstransit rabbitMQ 在多线程上发布

multithreading - 为什么基于事件的网络应用程序天生比线程网络应用程序快?

ios - 将文本字段输入更改为在 UIDatePicker 中选择的日期(当值更改时)

ios - 如何扩大 UIButton 的触摸区域?

iphone - 在启动动画之前修改 iPhone 动画容器 View

c# - .NET 线程问题

iphone - 带有 UITableViewController 的应用程序变得非常无响应

ios - UISwipeGestureRecognizer 没有可见的接口(interface)声明选择器 'touchesMoved:withEvent:'

ios - 如何在 Swift 中为我的应用制作自定义键盘?