在iOS 4(iPhone)上使用NSInvocationOperation(NSOperation)与NSOperationQueue进行重大减速

时间:2010-09-17 03:53:24

标签: iphone multithreading ios4 queue notifications

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

在案例A中,由于在某个视图中点击某个窗口小部件而调用操作O.轻触窗口小部件后,操作O运行一段时间(我可以看到这要归功于UIActivityIndi​​cator),但它不会减慢或阻止UI,因此我可以点击其他窗口小部件并执行其他UI操作操作O正在运行。

在案例B中,在app delegate的didReceiveLocalNotification方法中,作为接收本地通知的结果调用了操作O.在这种情况下,在调用操作O之后立即执行的UI操作仍然在didReceiveLocalNotification方法中,速度相当慢,基本上是爬行,几乎就像操作O接管了CPU一样。

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

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

1 个答案:

答案 0 :(得分:0)

您是否尝试降低线程优先级?

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