使用 NSOperationQueue 执行 iOS 应用程序初始化

Posted

技术标签:

【中文标题】使用 NSOperationQueue 执行 iOS 应用程序初始化【英文标题】:Using NSOperationQueue to perform iOS application initialization 【发布时间】: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 设备。因此,我们正在讨论为(目前相当大但不断减少的)少数用户添加兼容性,同时尝试编写最少的代码以帮助未来的可维护性。 【参考方案1】:

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

【讨论】:

以上是关于使用 NSOperationQueue 执行 iOS 应用程序初始化的主要内容,如果未能解决你的问题,请参考以下文章

[iOS开发]NSOperation & NSOperationQueue

NSOperationQueue 和并发操作

ios多线程 -- NSOperation 简介

iOS多线程---NSOperation介绍和使用

iOS 使用 NSOperationQueue 和 AFNetworking 实现多下载功能

iOS开发中关于多线程的问题(NSOperationQueue,NSThread,GCD)