当我们使用NSTimer时,一旦在上述间隔后调用回调,UI是否会被阻止?
答案 0 :(得分:8)
这取决于。大多数时候,这不会是一个问题。
如果,则满足以下两个条件,NSTimer
将阻止UI线程:
NSRunLoop
上。无论何时通过在主线程上调用NStimer的scheduledTimerWith...
类方法创建它,都会出现这种情况。答案 1 :(得分:2)
计时器与run一起工作 循环。要有效地使用计时器,你 应该知道如何运行循环 操作 - 参见NSRunLoop和线程 编程指南。
一旦在运行循环上安排,就可以了 计时器以指定的间隔触发 直到它失效。一个 非重复计时器使自身无效 火灾发生后立即发生。然而, 对于重复计时器,你必须 自己使计时器对象无效 通过调用其invalidate方法。 调用此方法请求 从当前删除计时器 运行循环;结果,你应该 总是从中调用invalidate方法 与计时器相同的线程 安装。使计时器无效 立即禁用它,以便它没有 更长时间会影响运行循环。运行 然后循环删除并释放 计时器,就在之前 invalidate方法返回或在某些方面返回 以后点。一旦失效,计时器 对象无法重复使用。
我相信NSTimer
不会阻止UI线程。另请查看此前的SO问题NSTimer and updating UI