从NSOperationQueue获取底层dispatch_queue_t

che*_*ica 10 nsoperationqueue grand-central-dispatch ios afnetworking

我似乎dispatch_queue_tNSOperationQueue队列之间有一些混淆.

默认情况下,AFNetworking AFImageRequestOperation将在应用程序的主线程上执行成功回调块.要更改此设置,请使用允许您选择运行回调的队列AFHTTPRequestOperation的属性successCallbackQueue.

我正在尝试在已经执行HTTP请求的相同后台队列/后台线程上执行成功回调.NSOperationQueue运行HTTP请求的主要线程也应该运行回调,而不是返回主线程,因为我需要使用一些返回的图像进行一些繁重的计算.

我的第一次尝试是设置successCallbackQueue为运行的NSOperationQueue实例AFImageRequestOperation.但是,successCallbackQueue属性是类型的dispatch_queue_t,所以我需要一种方法来获取我的实例底层dispatch_queue_tNSOperation,如果有这样的事情.

这是可能的,还是我需要创建一个单独的dispatch_queue_t

我问的原因:AFNetworking继承的有些奇怪NSOperation,但我们希望我们使用dispatch_queue_t队列进行回调.混合两种范式dispatch_queue_tNSOperationQueue.

谢谢你的任何提示!

das*_*das 8

没有这样的事情,a NSOperationQueue和a 没有一对一的对应关系,dispatch_queue_t两个API中的排队概念是非常不同的(例如,NSOperationQueue没有像GCD那样严格的FIFO排队).

NSOperationQueue用于执行代码的唯一调度队列是缺省优先级全局并发队列.


mat*_*ttt 5

NSOperationQueue不是AFNetworking的瓶颈.请求操作受网络绑定,而不是CPU或内存.所有工作都在调度队列中异步完成,调度队列可作为属性访问AFHTTPRequestOperation.

不建议使用网络线程进行任何处理.这不会以任何方式改善性能.

相反,如果您注意到性能问题,请尝试限制操作队列中的最大并发操作数,以间接控制这些后台处理队列所完成的工作量.