2011-03-21 29 views
0

在我的iPhone應用程序中,我有一個輔助線程用於在後臺執行任務,而每隔幾毫秒,必須更新視圖(而不是主線程)。我曾嘗試下面的代碼在我UIView子類:UIView setNeedsDisplay不在主線程中?

[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO]; 

這在模擬器上的偉大工程,但是,我的設備上,這是非常laggy。我能想到的唯一的事情是主線程與UIKit的常規例程陷入了僵局,這意味着我們的setNeedsDisplay會在它應該(大約1/2秒後)被調用的時候。我認爲這是因爲在其他代碼中,基於用戶交互,我立即調用setNeedsDisplay,並且它沒有任何延遲地正常工作。輔助線程上的後端計算比用戶界面線程上的少。這在我的應用程序中導致了一些非常糟糕的視覺效果。

因此,總結一下,我該如何解決這個問題?


UPDATE:

有另一種辦法,我要告訴它需要對自己進行刷新X次秒的看法?如果可能的話,這最終可能會對我有更好的表現。我已經試過CADisplayLink沒有成功...

回答

3

如果你的用戶界面受到很大的打擊,導致你的通話延遲了很多,請嘗試批量更新用戶界面稍微和/或圍繞TableView批量執行beginUpdate/endUpdate更新(例如)

我在做MonoTouch類似的事情,我沒有看到任何滯後的程度。我的所有更新都來自後臺線程,與您的應用相同。

或者,如果您的主UI可以使用更多的CPU時間,請嘗試降低後臺線程優先級並查看是否有幫助。

+0

這將是一個很好的優先事項?我有它設置爲0.1,它仍然滯後.. – 2011-03-22 17:25:31

+1

沒關係,我用'[NSTimer scheduledTimerWithTimeInterval:0.1目標:自我選擇器:@選擇器(setNeedsDisplay)userInfo:nil重複:YES];'現在似乎工作正常。 – 2011-03-22 18:34:32