在 GCD 串行队列上调度 NSTimers 并使其失效是否安全?


正确的

方法是什么?NSTimer文档是这样说的:

特殊注意事项

您必须从线程发送此消息 安装了计时器。如果您从其他人发送此消息 线程,则可能不会删除与计时器关联的输入源 从其运行循环,这可能会阻止线程退出 适当地。

由于GCD不能保证串行队列将始终在同一线程上运行块,因此确保在同一线程上调度和使NSTimer失效的正确方法是什么?

编辑:

按照以下答案的建议,我创建了MSWeakTimer (https://github.com/mindsnacks/MSWeakTimer),这是一个自定义计时器实现,使用可从任何队列中使用的GCD

您不应在 GCD 管理的匿名工作线程上安装 NSTimer

将调度计时器源与 GCD 一起使用,而不是NSTimer ,参见 dispatch_source_create(3)。

NSTimer依赖于当前线程的运行循环,这对于 GCD 队列没有意义。有关 GCD 和运行循环 API 的更多详细信息,请参阅 WWDC2012 GCD 会话。

相关内容

最新更新