【问题标题】:Major slowdown using NSInvocationOperation (NSOperation) with NSOperationQueue on iOS 4 (iPhone)在 iOS 4 (iPhone) 上使用 NSInvocationOperation (NSOperation) 和 NSOperationQueue 的主要减速
【发布时间】:2011-04-13 13:14:54
【问题描述】:

我有一个通过 NSInvocationOperation 调用的冗长操作 O,它本身通过将其添加到 NSOperationQueue 来进行调度,以便它异步运行。这个冗长的操作 O 在我的应用程序中的两种不同情况下被调用。

在情况 A 中,操作 O 是由于在某些视图中点击某些小部件而调用的。一旦轻按小部件,操作 O 就会运行一段时间(感谢 UIActivityIndi​​cator,我可以看到),但它不会减慢或阻塞 UI,因此我可以轻按其他小部件并执行其他 UI 操作当操作 O 正在运行时。

在情况 B 中,在应用委托的 didReceiveLocalNotification 方法中,由于接收到本地通知而调用操作 O。在这种情况下,在调用操作 O 之后立即执行的 UI 操作虽然仍在 didReceiveLocalNotification 方法中,但速度大大减慢,基本上是爬行,几乎就像操作 O 已经接管了 CPU。

为什么会这样,在情况 B 中调用操作 O 的正确方法是什么,以便它确实在后台以较低的优先级并发运行,让 didReceiveLocalNotification 方法中的其余代码正常运行速度?

注意:O 操作会使用本地通知(删除现有通知或安排新通知)和日历(查询事件存储以更好地安排本地通知)。

【问题讨论】:

    标签: iphone multithreading ios4 queue notifications


    【解决方案1】:

    你试过降低线程优先级吗?

    这仅适用于 iOS 4,但您可以在 NSInvocationOperation 上调用方法 setThreadPriority

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      相关资源
      最近更新 更多