2

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

我有一个包含 NSOperationQueue 的视图控制器。我创建了一个导入器类的实例,它是 NSOperation 的子类。在我的导入器的 main() 方法中,我设置了一个 ASIHTTPDataRequest。我创建了请求,然后是启动请求的时候了。

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

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

为什么同步调用有效,而异步调用无效?我正在模仿苹果“TopSongs”样本的进口商类。

4

2 回答 2

6

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

  • ASIHTTPRequest 并非设计为从后台线程运行。[ASIHTTPRequest requestFinished]在主线程调用“完成”回调;它永远不会被后台线程接收,因此后台线程的运行循环永远不会运行。
  • ASIHTTPRequest 无论如何都是一个NSOperation。这是一个实现细节。
  • 默认情况下,ASIHTTPRequest 在后台线程中运行其网络代码,因此将其粘贴在另一个线程中不太可能带来太多好处。

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

于 2010-08-12T19:58:57.363 回答
1

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

于 2010-08-12T15:41:58.747 回答