ios – 可以在后台线程上从ASIHTTPRequestAFNetworking执行completionBlock吗?

ios – 可以在后台线程上从ASIHTTPRequestAFNetworking执行completionBlock吗?,第1张

概述我在一个单独的线程中同步启动我的ASIHTTPrequest,如下所示: //inside this start method I create my ASIHTTPRequest and start itdispatch_async(dispatch_get_global_queue(0, 0), ^{ [process start];}); 但是,仍然在主线程上触发了complet 我在一个单独的线程中同步启动我的ASIhttprequest,如下所示:

//insIDe this start method I create my ASIhttpRequest and start itdispatch_async(dispatch_get_global_queue(0,0),^{    [process start];});

但是,仍然在主线程上触发了completionBlock.是否可以将completionBlock的执行保持在与请求启动位置相同的线程中?

我能解决这个问题的唯一办法就是定义一个调度队列并在同一个线程中手动执行completionBlock,从而保存对创建队列的引用.但是这并没有直接解决它,因为在将其余代码重定向到创建的调度队列之前,你会在主线程中传递一个非常小的时刻.

有人有更好的解决方案吗?

编辑:AFNetworking完成块也是如此…

解决方法 好的,回答我自己的问题:
ASIhttpRequest框架没有在不同线程中启动完成块的选项.

相反,人们可以使用AFNetwork框架.在这里,您可以在任何类型的AFOperation中使用两个属性,称为“successCallbackQueue”和“failureCallbackQueue”.您可以在其中添加预定义的“dispatch_queue_t”来处理成功和失败块的执行.

希望这会帮助其他人解决同样的问题!

更新:示例

dispatch_queue_t requestQueue = dispatch_queue_create("requestQueue",NulL); AFhttpRequestoperation *operation = [[AFhttpRequestoperation alloc] initWithRequest:yourRequest]; operation.successCallbackQueue = requestQueue; operation.failureCallbackQueue = requestQueue; [operation setCompletionBlockWithSuccess:^(AFhttpRequestoperation *operation,ID responSEObject) {    // add code for completion } failure:^(AFhttpRequestoperation *operation,NSError *error) {    // add code for failure }]; [operation start];
总结

以上是内存溢出为你收集整理的ios – 可以在后台线程上从ASIHTTPRequest / AFNetworking执行completionBlock吗?全部内容,希望文章能够帮你解决ios – 可以在后台线程上从ASIHTTPRequest / AFNetworking执行completionBlock吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1051845.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存