让我们假设我们有简单的用户界面,无论出于何种原因,每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