这样做的正确方法是什么?这NSTimer
文档是这样说的:
特别注意事项
您必须从以下线程发送此消息
安装了计时器。如果您从其他人发送此消息
线程中,与计时器关联的输入源可能不会被删除
从其运行循环中,这可能会阻止线程退出
适当地。
Since GCD
不能向您保证串行队列将始终在同一线程上运行块,确保您调度并使之无效的正确方法是什么NSTimer
在同一个线程上?
EDIT:
根据下面答案的建议,我创建了MSWeakTimer
(https://github.com/mindsnacks/MSWeakTimer https://github.com/mindsnacks/MSWeakTimer)这是一个自定义计时器实现,使用GCD
可以从任何队列中使用。
你不应该安装NSTimer
在 GCD 管理的匿名工作线程上。
使用带有 GCD 的调度计时器源而不是NSTimer
,参见调度_源_创建(3)。
NSTimer
依赖于当前线程的运行循环,这对于 GCD 队列来说没有意义。有关 GCD 和 runloop API 的更多详细信息,请参阅 WWDC2012 GCD 会议。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)