Ios 异步API调用(解析)是否仅使用GCD?网间网操作系统

Ios 异步API调用(解析)是否仅使用GCD?网间网操作系统,ios,asynchronous,parse-platform,grand-central-dispatch,Ios,Asynchronous,Parse Platform,Grand Central Dispatch,正如标题所要求的 异步API调用(如用于iOS的Parse API)是否只是将该调用放在一个新线程上(使用GCD),以便“在后台”执行 如果是这种情况,那么我将假设同步API调用仍保留在当前线程上 谢谢 我相信它使用的优先级或操作队列与从中发出的呼叫相同。例如,在主线程上进行parseapi调用时,您经常会收到一条关于主线程上长时间运行的操作的警告 我不认为所有API调用都是这样,因为API调用周围的库包装器在某些情况下可能使用它自己的私有操作队列。不一定。它可以位于具有不同调度优先级的另一个操

正如标题所要求的

异步API调用(如用于iOS的Parse API)是否只是将该调用放在一个新线程上(使用GCD),以便“在后台”执行

如果是这种情况,那么我将假设同步API调用仍保留在当前线程上


谢谢

我相信它使用的优先级或操作队列与从中发出的呼叫相同。例如,在主线程上进行parseapi调用时,您经常会收到一条关于主线程上长时间运行的操作的警告


我不认为所有API调用都是这样,因为API调用周围的库包装器在某些情况下可能使用它自己的私有操作队列。

不一定。它可以位于具有不同调度优先级的另一个操作队列上,它将位于另一个线程上,如开源代码所示。它使用锁和@synchronize标记来确保块的所有内容最终都会合,等等。

tl;dr除了一些例外情况,这取决于开发人员

首先,您不通过GCD控制线程,而是将任务放在队列上

Grand Central Dispatch(GCD)是苹果公司开发的一项技术,用于优化多核处理器系统和其他对称多处理系统的应用程序支持。它是基于线程池模式的任务并行实现。其基本思想是将线程池的管理从开发人员手中移开,更接近操作系统。开发人员将“工作包”注入池中,而不考虑池的体系结构。此模型提高了简单性、可移植性和性能

第二,你所说的API是什么意思?我想您是想说restapi。另一个假设是,您指的是RESTAPI服务的本机SDK,因为若您通过网络库自己实现它,那个么您将负责这项工作。从我在iOS中3年多的经验中可以看出,默认情况下,对任何方法的所有调用都是同步的,开发人员有责任通过GCD或NSOperationQueue或其他方式将它们放到另一个队列中

请不要被API调用结束时出现的完成块参数所迷惑。一般情况下,您还负责确保在主队列中对UI进行任何更新,,因为默认情况下,此块不在主队列中执行,您可能需要对从服务器获取的数据进行一些操作,例如排序、转换为其他类型等

只有少数例外的SDK会在主队列上放置一个完整的完成块,例如AFNetworking或Parse。但在这种情况下,SDK供应商确实提供了有关这种行为的信息