美文网首页程序员
iOS NSTimer没有GCD Timer准时的原因

iOS NSTimer没有GCD Timer准时的原因

作者: wp_Demo | 来源:发表于2018-12-24 21:17 被阅读0次

NSTimer不准时的原因:
1:RunLoop循环处理的时间
2:受RunLoop模式的影响

gcd的timer与NSTimer是不同的
1:都是源,gcd的timer是dispatch的源,而NSTimer是RunLoop的源
2:gcd的timer不需要加入mode,那么就不会受到切换模式的影响了
3:gcd的timer加在了主线程是需要runLoop调用的,但是当添加到子线程是不受runLoop影响的

关于第三点可以通过打断点看一下调用:
当我们把gcd的timer加在的主线程:
2.png
可以看到是有RunLoop参与的
但是当我们添加在子线程:
14.png
可以看到是没有runLoop参与的

所以我们是否可以得出:
如果要写gcd的timer的话,就不要添加在主线程,因为会收到RunLoop循环时间的影响.添加在子线程,就可以了.当然这个也要看具体场景了.

相关文章

网友评论

    本文标题:iOS NSTimer没有GCD Timer准时的原因

    本文链接:https://www.haomeiwen.com/subject/sudtlqtx.html