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

iphone和iPad中的同步和异步是什么?,iphone,ipad,Iphone,Ipad,ios中的同步和异步是什么?我是c目标的新手。当我从服务器获取数据时,我应该在代码中使用哪一个。所以请帮帮我 提前感谢。大多数情况下,您会对此类操作进行异步调用,否则您的UI将被阻止,因为您正在使用主线程。您应该始终使用异步加载网络请求 异步切勿阻塞等待网络响应的主线程 异步可以在单独的线程上同步,也可以在任何线程的运行循环中调度 同步阻塞主线程,直到它们完成请求 对于演示代码或Turiorial,请查看此链接Synchronous,顾名思义,该操作将与应用程序的运行循环同步进行 为了更好地理解

ios中的同步和异步是什么?我是c目标的新手。当我从服务器获取数据时,我应该在代码中使用哪一个。所以请帮帮我


提前感谢。

大多数情况下,您会对此类操作进行异步调用,否则您的UI将被阻止,因为您正在使用主线程。

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

异步
切勿阻塞等待网络响应的主线程

异步可以在单独的线程上同步,也可以在任何线程的运行循环中调度

同步
阻塞主线程,直到它们完成请求


对于演示代码或Turiorial,请查看此链接

Synchronous,顾名思义,该操作将与应用程序的运行循环同步进行

为了更好地理解它,假设您从服务器获取数据后必须在UITableview中显示一些数据。假设服务器的请求和响应大约需要3秒钟。当您从服务器同步获取这些数据时,您的应用程序将在加载tableview和将数据内容加载到tableview之间冻结3秒钟

现在,如果您异步发送请求,您的应用程序将不会冻结,但它将在服务器响应之前加载tableview和tableview内容。换句话说,你的应用程序不会等待3秒钟的服务器响应时间。你必须采取必要的委派操作或阻止操作来检查响应并重新加载tabledata,以便在tableview中显示服务器响应


哪种方法更好纯粹是开发人员想要的选择,他们的应用程序应该表现良好,但苹果文档建议,如果使用同步调用,不要从当前运行循环启动调用。

使用异步,所有线程都并行执行操作。因此,永远不要阻塞等待网络响应的主线程

使用同步,所有线程将逐个执行操作。因此,应该等到其他线程任务完成


希望它是合适的。

基于其他答案的快速提示:调度同步不会阻止主线程,除非您调度到主线程

例如:

// 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*/ });
同步调用(阻塞)是在同一队列中运行后续调用之前必须完成的调用。它将为该队列提供所有处理器时间,直到它完成为止。这会阻塞队列。 异步调用可以在队列中启动,然后在该队列拥有的另一个线程(处理器时间计划)上运行,而其他调用则由其他线程启动

对web调用使用dispatch_async非常重要,因为返回结果可能需要时间,并且您希望其他任务能够在队列中启动并使用它的线程。通常的做法是在自定义后台队列上执行web工作(如下载文件),然后在完成后分派到主队列以更新用户


这里还有更多内容,您可以从Apple阅读有关调度队列的信息

看看这个:异步不是iOS特有的。异步在任何iOS书籍中都有很好的解释,并且有多种方法可以实现。服务器通信必须始终异步完成。