【发布时间】:2020-02-13 11:24:40
【问题描述】:
端口等输入源将事件异步传递到运行循环,而计时器同步传递事件是什么意思。
定时器是否阻塞线程?
【问题讨论】:
标签: ios foundation
端口等输入源将事件异步传递到运行循环,而计时器同步传递事件是什么意思。
定时器是否阻塞线程?
【问题讨论】:
标签: ios foundation
Threading Programming Guide: Run Loops 说:
一个运行循环从两种不同类型的源接收事件。 输入源 传递异步事件,通常是来自另一个线程或来自不同应用程序的消息。 定时器源传递同步事件,在预定时间或重复间隔发生。两种类型的源都使用特定于应用程序的处理程序例程在事件到达时对其进行处理。
但是定时器只会在定时器的闭包或选择器方法运行时阻塞线程。但是一旦你从那里返回,线程就不再被阻塞。所以一定要尽快进出。
例如,如果您安排了一个计时器在 10 秒内触发,并且计时器的处理闭包/选择器中的代码需要 100 毫秒才能运行,那么线程不会被阻塞,直到计时器触发,然后仅 100毫秒。与重复计时器相同。
归根结底,只要您没有在计时器处理程序中做任何计算量太大的事情,就没有什么可担心的。如果你确实需要做任何可能阻塞任何实质性时间的事情,那么要么让你的计时器处理程序异步地将相关代码分派到某个后台队列,或者只是安排一个 GCD 计时器直接在后台队列上运行,绕过 @ 987654322@一共。
但对于大多数 Timer 用例来说,这不是问题。
【讨论】: