【问题标题】:Low Priority Long Running Task低优先级长时间运行的任务
【发布时间】:2011-06-01 16:44:41
【问题描述】:

我有一个应用程序需要在启动(导入核心数据)后执行相对较慢(15-30 秒)的任务。我正在寻找一种执行任务的好方法,而不会导致界面显得迟缓或冻结。我试过了:

  • 将导入分成短操作并将它们添加到主 NSOperationQueue
  • 使用performselectorinbackground 执行导入以尝试加快进程

但是,两者都没有带来显着的改进。有什么想法吗?

【问题讨论】:

    标签: iphone objective-c cocoa-touch cocoa


    【解决方案1】:

    将导入分成短操作并将它们添加到 主 NSOperationQueue

    [我的重点]

    如果您将操作放在主队列上,它们将在主线程上运行并影响 UI。您应该create a new queue,将最大并发设置为 1,然后添加所有操作。

    当然,在大多数 iDevice 上只有一个 CPU 内核,因此您可能仍然会看到问题,但如果您的队列未使用主线程,fiddling with the operation's thread priority 可能会有所帮助。

    【讨论】:

      【解决方案2】:

      如果您试图防止界面冻结,您将需要使用后台线程。您可以使用performSelectorInBackground,也可以使用[NSThread detachThreadSelector:。然而,这些实际上并不会加速这个过程,它们只是释放你的主线程来做其他事情。如果您决定使用第二个线程,如果您之前没有使用过,您可能需要先阅读它。

      【讨论】:

      • 我正在使用performselectorinbackground,它仍然导致界面非常缓慢且难以交互。
      • 好吧,如果后台的进程非常密集,就会有一些滞后,iPhone 就这么强大。至于导入核心数据,您可能需要阅读以下内容:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…。它主要是说为了保持低内存占用,您应该批量导入数据,并经常清除内存堆栈。它还说明了如何做到这一点,并使用其他技术。
      猜你喜欢
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2021-09-11
      • 1970-01-01
      • 2020-03-22
      相关资源
      最近更新 更多