我有一个很长的操作 O,它是通过 NSInitationOperation 调用的,它本身是通过将其添加到 NSOperationQueue 中来调度的,以便它异步运行。在我的应用程序中,在两种不同的情况下调用了冗长的操作 O。
在情况 A 中,操作 O 是由于在某个 View 中点击某个小部件而被调用的。一旦点击小部件,操作 O 就会运行一段时间(感谢 UIActivityIndicator,我可以看到这一点),但它不会减慢或阻止 UI,因此我可以点击其他小部件并执行其他 UI 操作当操作 O 正在运行时。
在情况 B 中,操作 O 作为接收本地通知的结果而在应用程序委托(delegate)的 didReceiveLocalNotification 方法中被调用。在这种情况下,在调用操作 O 之后立即执行的 UI 操作,虽然仍在 didReceiveLocalNotification 方法中,但速度显着减慢,基本上慢得像爬行一样,几乎就像操作 O 接管了 CPU 一样。
为什么会这样,以及在情况 B 中调用操作 O 的正确方法是什么,以便它确实以较低优先级在后台并发运行,而使 didReceiveLocalNotification 方法中的其余代码正常运行速度?
注意:操作 O 会破坏本地通知(删除现有通知或安排新通知)和日历(查询事件存储以更好地安排本地通知)。
最佳答案
您是否尝试过降低线程优先级?
这仅适用于 iOS 4,但您可以在 NSInitationOperation 上调用方法 setThreadPriority
。
关于iphone - 在 iOS 4 (iPhone) 上使用 NSInitationOperation (NSOperation) 和 NSOperationQueue 会导致速度显着下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732566/