什么是iOS中的同步和异步?我是Objective-C的新手。在从服务器获取数据时,我应该在我的代码中使用哪个呢?请帮忙解答。
提前感谢您的帮助。
提前感谢您的帮助。
您应该始终使用异步加载网络请求。
异步
不会阻塞主线程等待网络响应。
异步可以在单独的线程上同步执行,也可以在任何线程的运行循环中安排。
同步
将主线程阻塞直到完成请求。
有关演示代码或教程,请查看此链接 使用 NSURLConnection 和 SBJSON 的异步 Web 服务客户端
根据其他答案的快速说明:除非您将调度到主线程,否则dispatch_sync不会阻塞主线程。
例如:
// Block main thread because the main queue is on it.
dispatch_sync(dispatch_get_main_queue(), ^{ /*do stuff*/ });
// Block background thread.
dispatch_sync(my_work_queue, ^{ /*do stuff*/ });
同步调用(阻塞)是指必须在后续调用可以在同一队列中运行之前完成的调用。它获得该队列的所有处理器时间,直到它完成。这使其阻塞了队列。
异步调用可以在队列中启动,然后在由该队列拥有的另一个线程(处理器时间表)上保留运行,同时启动其他调用以及其他线程。
对于网络调用,使用dispatch_async非常重要,因为获取结果可能需要时间,而您希望其他任务能够开始在队列中并使用其线程。 常见做法是在自定义后台队列上执行网络工作,如下载文件,然后在完成后将其转发到主队列以更新用户。
更多相关内容可以从Apple 此处 阅读关于调度队列的详情。