使用 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