将NSOperation添加到启动异步ASIHTTPRequest的NSOperationQueue

时间:2010-08-12 14:07:28

标签: iphone asynchronous asihttprequest nsoperation nsoperationqueue

所以我正在尝试执行所有在后台线程上下载数据的REST调用,以便UI保持响应。

我有一个包含NSOperationQueue的viewcontroller。我创建了一个我的导入器类的实例,它是NSOperation的子类。在我的导入器的main()方法中,我正在设置ASIHTTPDataRequest。我创建请求,然后是开始请求的时间。

问题: 通过在请求上调用“startAsynchronous”来启动请求时遇到了问题。委托回调永远不会被调用。它就像请求开始,下载其数据,但从不调用委托回调方法。

我的解决方案: 当我同步启动请求时,一切似乎都能正常工作(即回调等)。这是正确的解决方案吗?

为什么同步调用有效,但不是异步调用?在Apples“TopSongs”样本之后,我正在为我的导入器类建模。

2 个答案:

答案 0 :(得分:6)

如果从主线程运行它,ASIHTTPRequest本身不应该阻止UI。

  • ASIHTTPRequest不是为从后台线程运行而设计的。 [ASIHTTPRequest requestFinished]调用主线程上的“完成”回调;它永远不会被后台线程接收,因此后台线程的运行循环永远不会运行。
  • ASIHTTPRequest无论如何都是一个NSOperation 。这是一个实现细节。
  • ASIHTTPRequest默认在后台线程中运行其网络代码,因此您不太可能通过将其放在另一个线程中看到很多好处。

如果正在解析需要很长时间的数据,请将其粘贴在操作中。

答案 1 :(得分:1)

当方法main()结束执行时,NSOperation已完成并释放,因此您更新接收委托回调,因为委托已被释放。