Ios 异步NSURL请求如何适应大型中央调度/操作队列?

Ios 异步NSURL请求如何适应大型中央调度/操作队列?,ios,nsurlconnection,grand-central-dispatch,afnetworking,nsoperationqueue,Ios,Nsurlconnection,Grand Central Dispatch,Afnetworking,Nsoperationqueue,有人能解释一下异步NSURL请求与GCD和NSOperationQueues之间的关系吗 我不知道什么时候用 现在,当我需要获取/上传数据到服务器时,我一直在使用异步NSURL请求“逃避”。但有人建议我应该使用GCD。我的问题是我不知道在现实生活中什么样的例子GCD会更好。有人有我的常用用例吗?例如,如果我使用GCD存储一个包含10个异步NSURL GET请求的队列,这对我有什么好处?在grand central调度队列或NSOperationQueue中有一个异步NSURL请求有意义吗 谢谢大

有人能解释一下异步NSURL请求与GCD和NSOperationQueues之间的关系吗

我不知道什么时候用

现在,当我需要获取/上传数据到服务器时,我一直在使用异步NSURL请求“逃避”。但有人建议我应该使用GCD。我的问题是我不知道在现实生活中什么样的例子GCD会更好。有人有我的常用用例吗?例如,如果我使用GCD存储一个包含10个异步NSURL GET请求的队列,这对我有什么好处?在grand central调度队列或NSOperationQueue中有一个异步NSURL请求有意义吗


谢谢大家!

这与主题无关,但是如果你使用AFNetworking Lib,你不必做上面提到的任何事情

AfNead是IOS和Mac OS X的一个令人愉快的网络库。它是建立在NSURLCONTION、NSCORT和其他熟悉的基础技术之上的,它具有模块化的体系结构,具有设计良好、功能丰富的API,是一种使用的乐趣。 回答你的问题,请读这个


这与主题无关,但如果使用AFNetworking Lib,则不必执行上述任何操作

AfNead是IOS和Mac OS X的一个令人愉快的网络库。它是建立在NSURLCONTION、NSCORT和其他熟悉的基础技术之上的,它具有模块化的体系结构,具有设计良好、功能丰富的API,是一种使用的乐趣。 回答你的问题,请读这个


在您的案例中,特别令人困惑的是,我们混合了HTTP请求队列(请求会一个接一个地发送)和操作队列(随机计算工作会一个接一个地执行)

标准的
NSURLConnection
实例在主线程上调用其委托,如果您当时没有在数据或UI上执行复杂的工作,这是正常的。但假设您需要下载一个大文件,并将其作为文件逐块写入磁盘,同时向下滚动表视图。现在,当您在磁盘上写入数据时,您的滚动可能会变得不稳定,从而阻塞主线程

这就是
GCD
或其更高级别的抽象
NSOperationQueue
发挥作用的地方。要解决这个问题,您需要卸载主线程的数据注销调用。您可以通过
setDelegateQueue:
NSURLConnection
上指定
NSOperationQueue
实例来实现这一点。这将确保在后台线程中调用您的委托,从而调用您的写调用。您还可以将委托调用留在主线程上,并将昂贵的写调用封装在一个块中,然后使用
dispatch\u async
在主线程外执行。现在,
NSOperationQueue
基本上包装了一个调度队列,您通过在原始调度队列上使用它来避免额外的线程切换,因此我建议使用
NSOperationQueue
解决方案(这看起来也比较简单)

AFNetworking
是一个很好的库,它通过第三种方式解决了这个问题:它触发一个
NSThread
,该线程专用于
NSURLConnection
委托调用。这是GCD之前从主线程卸载工作的方式。虽然GCD有效,但它提供了一种更有效、更优秀的方式,向系统展示您的背景工作

最后,如果您正在寻找HTTP请求队列,Cocoa不提供它。您必须自己构建一个调度器,或者使用
AFNetworking
,这也是一个不错的选择


如果您对这个主题感兴趣,GCD提供的不仅仅是托管
NSURLConnection
代表电话,我建议您阅读苹果的《伟大》或在GCD上观看《卓越》(Blocks and Grand Central Dispatch in Practice and Mastering Grand Central Dispatch).

在您的案例中,特别令人困惑的是,我们混合了HTTP请求队列(请求会一个接一个地发送)和操作队列(随机计算工作会一个接一个地执行)

标准的
NSURLConnection
实例在主线程上调用其委托,如果您当时没有在数据或UI上执行复杂的工作,这是正常的。但假设您需要下载一个大文件,并将其作为文件逐块写入磁盘,同时向下滚动表视图。现在,当您在磁盘上写入数据时,您的滚动可能会变得不稳定,从而阻塞主线程

这就是
GCD
或其更高级别的抽象
NSOperationQueue
发挥作用的地方。要解决这个问题,您需要卸载主线程的数据注销调用。您可以通过
setDelegateQueue:
NSURLConnection
上指定
NSOperationQueue
实例来实现这一点。这将确保在后台线程中调用您的委托,从而调用您的写调用。您还可以将委托调用留在主线程上,并将昂贵的写调用封装在一个块中,然后使用
dispatch\u async
在主线程外执行。现在,
NSOperationQueue
基本上包装了一个调度队列,您通过在原始调度队列上使用它来避免额外的线程切换,因此我建议使用
NSOperationQueue
解决方案(这看起来也比较简单)

AFNetworking
是一个很好的库,它通过第三种方式解决了这个问题:它触发一个
NSThread
,该线程专用于
NSURLConnection
委托调用。这是GCD之前从主线程卸载工作的方式。虽然GCD有效,但它提供了一种更有效的、好公民的方式向t