iPhone和iPad中的同步和异步是什么?

5
什么是iOS中的同步和异步?我是Objective-C的新手。在从服务器获取数据时,我应该在我的代码中使用哪个呢?请帮忙解答。
提前感谢您的帮助。

请看这个链接:https://dev59.com/6XRB5IYBdhLWcg3wAjTR - Hugo Hilário
异步编程不仅适用于iOS。任何一本iOS书籍都能很好地解释异步编程,而且有多种实现方式。服务器通信必须始终以异步方式进行。 - Khanh Nguyen
5个回答

6

您应该始终使用异步加载网络请求。

异步不会阻塞主线程等待网络响应。

异步可以在单独的线程上同步执行,也可以在任何线程的运行循环中安排。

同步将主线程阻塞直到完成请求。

有关演示代码或教程,请查看此链接 使用 NSURLConnection 和 SBJSON 的异步 Web 服务客户端


0

根据其他答案的快速说明:除非您将调度到主线程,否则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 此处 阅读关于调度队列的详情。


0
使用异步方式,所有线程都能并行执行操作。因此,不会阻塞主线程等待网络响应。
使用同步方式,所有线程一个接一个地执行操作。因此,必须等到其他线程的任务完成才能继续进行。
希望这样适合您。

0
大多数情况下,您将选择异步调用此类操作,否则您的UI将被阻塞,因为您正在使用主线程。

0
同步,顾名思义,操作将与应用程序的运行循环同步发生。
为了更好地理解它,假设您必须在从服务器获取数据后在UITableview中显示一些数据。想象一下,请求和响应从服务器需要大约3秒钟。当您从服务器同步获取此数据时,您的应用程序将在加载tableview和将数据内容加载到该tableview之间冻结大约3秒钟。
现在,如果您以异步方式发送请求,则您的应用程序不会冻结,但它将在服务器响应之前加载tableview和tableview内容。换句话说,您的应用程序不会等待3秒钟的服务器响应时间。您必须采取必要的委托操作或块操作来检查响应并重新加载表格数据,以便在tableview中显示服务器响应。
哪种方法更好纯粹是开发人员想要的和他们的应用程序应该如何行为,但Apple文档建议如果您使用同步调用,请勿从当前运行循环启动调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接