讓我們假設我們有簡單的用戶界面,無論出於何種原因,每5秒需要更新一次UILabel。NSTimer與單獨的線程 - 哪一個可供選擇?
我現在可以設置一個NSTimer來完成這項工作,或者創建一個獨立運行的線程,可以休眠5秒鐘,完成它的任務,再次休眠等等。
我會選擇哪一個?有什麼區別?
讓我們假設我們有簡單的用戶界面,無論出於何種原因,每5秒需要更新一次UILabel。NSTimer與單獨的線程 - 哪一個可供選擇?
我現在可以設置一個NSTimer來完成這項工作,或者創建一個獨立運行的線程,可以休眠5秒鐘,完成它的任務,再次休眠等等。
我會選擇哪一個?有什麼區別?
無論如何,您必須對主線程執行UI操作,因此除非您在設置標籤之前進行一些處理,否則使用其他線程將不會有好處。
UI只能在任何程序的主線程上更新。如果您想在單獨的線程中對標籤進行計算,那就很好了,但更新UI的代碼必須在主線程上運行(或者,您可以使用performSelectorOnMainThread:withObject:waitUntilDone:
在標籤上調用setText:
並使其運行正確)。
使用NSTimer
。
爲什麼?
-performSelectorOnMainThread:withObject:waitUntilDone:
更新用戶界面。如果標籤的計算需要一段時間(不只是假設他們這樣做,嘗試簡單的方法第一,看看),讓您的計時器開球的NSOperation做計算,然後有NSOperations完成後請致電-performSelectorOnMainThread:withObject:waitUntilDone:
。
因此,在NSTimer回調中,我不必「在主線程上調用」,但是在單獨的「我將不得不? 但是,如果計算標籤的值需要一些時間,NSTimer解決方案會中斷代碼執行並使UI感覺遲緩。那麼一個線程將是一個更好的選擇。正確? – Krumelur 2011-02-11 10:55:53