2010-09-17 50 views
5

我有一个漫长的操作O,通过NSInvocationOperation调用,本身通过将其添加到NSOperationQueue来调用它,以便它异步运行。这个冗长的操作O在我的应用中以两种不同的方式被调用。在iOS 4(iPhone)上使用NSInvocationOperation(NSOperation)和NSOperationQueue的主要放缓

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

在情况B中,作为接收本地通知的结果调用操作O,在应用程序委托的didReceiveLocalNotification方法中。在这种情况下,在调用操作O之后立即执行的UI操作仍处于didReceiveLocalNotification方法中,显着减慢了基本爬行的速度,就好像操作O接管了CPU一样。

为什么会这样,以及在情况B中调用操作O的正确方式是什么,以便它确实在低优先级的背景中同时运行,而让didReceiveLocalNotification方法中的其余代码在正常的速度?

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

回答

0

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

这将只适用于iOS 4,但您可以调用NSInvocationOperation上的方法setThreadPriority

相关问题