2010-09-17 52 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

相關問題