NSTimer与单独的线程 - 选择哪一个?

时间:2011-02-11 10:47:46

标签: objective-c cocoa-touch xamarin.ios

假设我们有简单的用户界面,无论出于何种原因,UILabel每5秒钟需要更新一次。

我现在可以设置一个完成工作的NSTimer,或创建一个无休止地运行的单独线程,睡5秒,做它的事情,再次睡觉等等。

我会选择哪一个?有什么区别?

3 个答案:

答案 0 :(得分:1)

你必须在主线程上进行UI操作,所以除非你在设置标签之前做一些处理,否则使用另一个线程没有任何好处。

答案 1 :(得分:1)

UI只能在任何程序的主线程上更新。如果你想在一个单独的线程中对标签进行计算,那就完全没问题,但更新UI的代码必须在主线程上运行(或者,你可以使用performSelectorOnMainThread:withObject:waitUntilDone:来调用{{1}在您的标签上并使其正常运行)。

答案 2 :(得分:1)

使用NSTimer

为什么?

  1. 一旦引入额外的线程,就会引入一类全新的错误,即线程同步问题。由于它们的不确定性,这些往往很难诊断和解决。
  2. 无论如何,您必须在主线程上进行UI更新。因此,您的主题必须-performSelectorOnMainThread:withObject:waitUntilDone:来更新UI。
  3. 如果标签的计算需要一段时间(不要只假设他们这样做,先用简单的方法试试看看),让你的计时器开始NSOperation进行计算然后让NSOperations在完成后调用-performSelectorOnMainThread:withObject:waitUntilDone: