在我的大部分面试中,我都被问到有关 Web 服务和多线程的问题。我两者都没有做过,所以我决定进一步了解Web 服务和使用 Grand Central Dispatch 进行多线程。
对于 Web 服务,我的理解是您需要使用诸如
NSURLConnection
之类的类来获取数据。基本上设置一个新的 NSURL,然后是一个连接,然后是一个请求。您还需要使用 API 的方法,例如didConnect
、didReceiveData
和didFailLoadWithError
。收到数据(通常为 JSON 或 XML 格式并存储为 NSData 对象)后,您可以存储它并解析它。有多种方法可以解析它,例如使用 SBJSON 或 NSXMLParser。然后您就可以用它做您需要的事情。对于多线程,Grand Central Dispatch 是一种 C 风格的多线程方式。基本上,当您需要从主线程进行大量操作以避免应用程序卡住时,您可以使用它。您可以同步或异步调度。异步意味着主线程上的方法将继续执行,同步意味着不会。您永远不需要将 GCD 与 NSURLConnection 一起使用,因为 NSURLConnection 已经在后台完成其工作,然后在主线程中调用委托(delegate)。但是,为了保存和解压缩文件,您应该使用 GCD。当您调用dispatch_async时,您会传入一个调度队列。您可以使用串行队列或并发队列。串行队列将按照任务到达的顺序一次执行一个队列中的任务。这是默认设置。使用并发队列,并发执行的任务可能会同时执行。
我的第一个问题是,我对这两个概念有正确的理解吗?我知道关于 GCD 有很多东西需要学习,但我只是想确保我的基本想法是正确的。另外,使用 GCD,为什么有人想要同步调度,这不会违背多线程的目的吗?
最佳答案
同步分派(dispatch)的唯一原因是防止当前代码继续执行,直到关键部分完成。
例如,如果您想从共享资源中获取一些值并立即使用它,则需要同步调度。如果当前代码不需要等待临界区完成,或者可以简单地向同一个串行队列提交额外的后续任务,那么通常首选异步提交。
关于multithreading - 我对这些概念的理解正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25716217/