iphone - 在 iOS 4 (iPhone) 上使用 NSInitationOperation (NSOperation) 和 NSOperationQueue 会导致速度显着下降

标签 iphone multithreading ios4 queue notifications

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

在情况 A 中,操作 O 是由于在某个 View 中点击某个小部件而被调用的。一旦点击小部件,操作 O 就会运行一段时间(感谢 UIActivityIndi​​cator,我可以看到这一点),但它不会减慢或阻止 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/

相关文章:

ios4 - App-In 购买错误 -1001

ios4 - 使用 AVFoundation 录制到电影文件时出错

ios - 如何在 OpenGL iOS 中制作气泡?

ios - 将表添加到现有数据库 IOS sqlite

c++ - 使用 sleep() 时生产者消费者(使用 Monitor)代码不工作?

c# - .NET (C#) 进程和 Adob​​e Acrobat

iphone - 如何在 iPhone SDK 的 TableView 中实现 "Load More Records"?

iphone - UITableView 与搜索栏问题

iphone - self.window.rootViewController 与窗口 addSubview

java - 使用ExecutorService时如何管理内存?