NSTImer事件会阻止主线程吗?

Kri*_*nan 5 iphone nstimer

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

dan*_*dee 9

那要看.大多数时候,这不会是一个问题.

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

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


vis*_*kh7 2

文件来看

\n\n
\n

计时器与 run\n 循环结合使用。要有效地使用计时器,您应该了解运行循环如何运行xe2x80x94请参阅 NSRunLoop 和线程编程指南。

\n\n

一旦安排在运行循环上,计时器就会按照指定的时间间隔触发,直到其失效为止。非重复计时器在触发后立即失效。但是,对于重复计时器,您必须通过调用其 invalidate 方法自行使计时器对象无效。调用此方法会请求从当前运行循环中删除计时器;\n 因此,您应该始终从安装计时器的同一线程调用 invalidate 方法。使计时器无效会立即禁用它,以便它不再影响运行循环。然后,run 循环会在 invalidate 方法返回之前或稍后某个时刻删除并释放计时器。一旦失效,计时器对象就无法重复使用。

\n
\n\n

我相信NSTimer不会阻塞 UI 线程。另请看一下之前的 SO 问题NSTimer 和更新 UI

\n