NSTImer事件会阻止主线程吗?

时间:2011-05-10 05:58:17

标签: iphone nstimer

当我们使用NSTimer时,一旦在上述间隔后调用回调,UI是否会被阻止?

2 个答案:

答案 0 :(得分:8)

这取决于。大多数时候,这不会是一个问题。

如果,则满足以下两个条件,NSTimer 阻止UI线程:

  1. 计时器安排在主线程的NSRunLoop上。无论何时通过在主线程上调用NStimer的scheduledTimerWith...类方法创建它,都会出现这种情况。
  2. 该方法在计时器触发时调用,执行“冗长”任务。想到同步执行的提取/ url请求等事情会浮现在脑海中......

答案 1 :(得分:2)

来自documents

  

计时器与run一起工作   循环。要有效地使用计时器,你   应该知道如何运行循环   操作 - 参见NSRunLoop和线程   编程指南。

     

一旦在运行循环上安排,就可以了   计时器以指定的间隔触发   直到它失效。一个   非重复计时器使自身无效   火灾发生后立即发生。然而,   对于重复计时器,你必须   自己使计时器对象无效   通过调用其invalidate方法。   调用此方法请求   从当前删除计时器   运行循环;结果,你应该   总是从中调用invalidate方法   与计时器相同的线程   安装。使计时器无效   立即禁用它,以便它没有   更长时间会影响运行循环。运行   然后循环删除并释放   计时器,就在之前   invalidate方法返回或在某些方面返回   以后点。一旦失效,计时器   对象无法重复使用。

我相信NSTimer不会阻止UI线程。另请查看此前的SO问题NSTimer and updating UI