假设我们有简单的用户界面,无论出于何种原因,UILabel每5秒钟需要更新一次。
我现在可以设置一个完成工作的NSTimer,或创建一个无休止地运行的单独线程,睡5秒,做它的事情,再次睡觉等等。
我会选择哪一个?有什么区别?
答案 0 :(得分:1)
你必须在主线程上进行UI操作,所以除非你在设置标签之前做一些处理,否则使用另一个线程没有任何好处。
答案 1 :(得分:1)
UI只能在任何程序的主线程上更新。如果你想在一个单独的线程中对标签进行计算,那就完全没问题,但更新UI的代码必须在主线程上运行(或者,你可以使用performSelectorOnMainThread:withObject:waitUntilDone:
来调用{{1}在您的标签上并使其正常运行)。
答案 2 :(得分:1)
使用NSTimer
。
为什么?
-performSelectorOnMainThread:withObject:waitUntilDone:
来更新UI。如果标签的计算需要一段时间(不要只假设他们这样做,先用简单的方法试试看看),让你的计时器开始NSOperation进行计算然后让NSOperations在完成后调用-performSelectorOnMainThread:withObject:waitUntilDone:
。