【问题标题】:Using NSOperationQueue to perform iOS application initialization使用 NSOperationQueue 执行 iOS 应用程序初始化
【发布时间】:2012-01-28 07:33:58
【问题描述】:

是否可以使用NSOperationQueue addOperationWithBlock 来延迟初始化代码,让应用没有被iOS看门狗杀死?

我们知道,如果应用程序在应用程序中花费太多时间,iOS 会终止应用程序:didFinishLaunchingWithOptions 或 applicationDidBecomeActive。

但是我有很多事情要做初始化。目前我正在做一堆同步的HTTP请求(让它同步:))这可能需要不可预测的持续时间。

您能否提出一个更好的解决方案来解决这个问题?

谢谢!

编辑:大家,同步的 HTTP 请求不是问题的主题。 我集成了很多第三方 SDK。我必须初始化所有这些,但我不知道它们在初始化期间在做什么。我只是想尽量减少被 iOS 杀死的风险。

【问题讨论】:

  • 我肯定会建议首先使您的 http 请求异步。将此代码(http 代码)放在 NSOperation 中是可以的,但与发出异步 http 请求相比并没有真正意义
  • @rpechayr 一个用例我认为对于发出的同步提取(无论是通过 NSOperationQueue 还是 GCD)是完全明智的,以免阻塞命名线程,作为 pre- NSURLConnection 上没有 + sendAsynchronousRequest:queue:completionHandler: 的 iOS 5 设备。因此,我们正在讨论为(目前相当大但不断减少的)少数用户添加兼容性,同时尝试编写最少的代码以帮助未来的可维护性。

标签: ios ios4 uiapplicationdelegate


【解决方案1】:

异步执行您的网络请求,如有必要,在请求进行时显示加载 UI。您应该永远不要application:didFinishLaunchingWithOptions: 中运行同步 Web 请求,看门狗的存在是有原因的。

【讨论】:

    猜你喜欢
    • 2016-04-22
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多