iphone - 如何可靠地管理后台请求?

标签 iphone objective-c multithreading asihttprequest

我需要对 http 服务器异步运行查询并处理响应。该查询实际上是一个相当大的带有回调的方法调用链。这增加了复杂性,因为调用链中有很多返回路径。

在当前请求完全完成之前,不应启动新请求。

以下是总体概要:

  1. 某些线程调用[Foo poll]
  2. poll 方法启动几个在后台运行的 HTTP 请求。在本例中为 ASIHTTPRequest。
  3. 请求最终会调用[Foo onRequestComplete]来解析响应。发生错误时,调用 [Foo onRequestError]。这是第二条返回路径。
  4. 然后,通过回调和更多返回路径对服务器进行更多调用。
  5. 最终将一些内容保存到磁盘。
  6. 投票已完成

这里有一个要点:在这些步骤中,对 poll 的调用应该被忽略(返回)或阻止,直到轮询完成。

如何确保在另一个轮询运行时 poll 函数被阻止或无操作?

最佳答案

只需使用NSLock即可。

[Foo poll]中:

if ([lock tryLock]) {
    // Do your stuff
}

[Foo onRequestComplete]中:

[lock unlock];

关于iphone - 如何可靠地管理后台请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5437857/

相关文章:

c# - 线程池 : Cross-thread operation not valid.

ios - 以编程方式设置栏按钮 "System Item"

ios - 暂停返回后滚动 BG 丢失(iOS-SpriteKit-iphone)

ios - NSOperation 和 NSURLConnection 迷惑了

iphone - 我如何在 app-info.plist 中使用常量,这样我就不会硬编码了?

java - 如何跨多个线程访问相同的 POJO 实例

iphone - 使用NSScanner查找短语的下一个匹配项

ios - 如何从链接正确显示图像? ios

ios - didUpdateLocations 为 : from: method is deprecated for latest iOS versions(12. 4).如何用 didUpdateLocations 替换它?

java - LayerUI仅在阻塞方法完成后才出现