【发布时间】:2011-04-13 13:14:54
【问题描述】:
我有一个通过 NSInvocationOperation 调用的冗长操作 O,它本身通过将其添加到 NSOperationQueue 来进行调度,以便它异步运行。这个冗长的操作 O 在我的应用程序中的两种不同情况下被调用。
在情况 A 中,操作 O 是由于在某些视图中点击某些小部件而调用的。一旦轻按小部件,操作 O 就会运行一段时间(感谢 UIActivityIndicator,我可以看到),但它不会减慢或阻塞 UI,因此我可以轻按其他小部件并执行其他 UI 操作当操作 O 正在运行时。
在情况 B 中,在应用委托的 didReceiveLocalNotification 方法中,由于接收到本地通知而调用操作 O。在这种情况下,在调用操作 O 之后立即执行的 UI 操作虽然仍在 didReceiveLocalNotification 方法中,但速度大大减慢,基本上是爬行,几乎就像操作 O 已经接管了 CPU。
为什么会这样,在情况 B 中调用操作 O 的正确方法是什么,以便它确实在后台以较低的优先级并发运行,让 didReceiveLocalNotification 方法中的其余代码正常运行速度?
注意:O 操作会使用本地通知(删除现有通知或安排新通知)和日历(查询事件存储以更好地安排本地通知)。
【问题讨论】:
标签: iphone multithreading ios4 queue notifications