2010-11-13 54 views
0

我在一個單獨的應用程序中編寫了一些示例代碼,它基本上在NSMutableArray中排隊項目。然後我有一個方法,通過該數組循環,並創建一個NSInvocationOperation,將其放入NSOperationQueue,釋放操作等等。然後該方法被調用(只需打印出存儲在數組中的字符串並傳入操作),它是否工作,並將NSNotification發送回ViewController。觀察者方法受到打擊,但操作對他們有滯後。例如,觀察者方法只是使用隊列中剩餘的消息數來更新UILabel。它最終會這樣做,但是在所有NSOperation完成和UI更新之間似乎有5秒的延遲。對我來說,似乎NSOperationQueue阻止了主線程。無論如何,讓用戶界面立即響應通知?NSOperationQueue滯後於IOS4

一個重要的注意事項是,我還沒有在手機上測試過,只是模擬器。我不確定這是否有所作爲。

對不起。我離開了我的電腦,我沒有在我面前的代碼。希望我解釋得很好。此外,我已閱讀文檔,只是沒有發現任何真正回答這個具體問題的東西。

+0

這可能並不重要,但您在哪些線程上發佈通知?默認情況下,使用默認通知中心發佈的通知將在其發佈的帖子上收到。 – warrenm 2010-11-13 21:31:26

+0

那麼這可能是有道理的,因爲ViewController正在接收通知,所以我猜測NSOperationQueue在發佈通知後會在同一個線程上運行。 – iosnewbie 2010-11-13 21:39:47

+0

例如, - (void)messagePosted:(NSNotification *)note {lblMessage.text =「Hi」;}被擊中,但在隊列上的操作之後,lblMessage的文本實際上不會變爲「Hi」幾秒鐘已經完成。 – iosnewbie 2010-11-13 21:43:40

回答

1

延遲是在非主程序的線程上執行的UI更新的典型情況。

立即看到在UILabel您的更新,一定要調用任何方法更新標籤的text如下:

[self performSelectorOnMainThread:@(myMethodToUpdateLabelWithText:) withObject:text waitUntilDone:NO]; 

其中myMethodToUpdateLabelWithText是你的類中的方法,設置標籤的文本價值。