程序员

iOS NSTimer没有GCD Timer准时的原因

2018-12-24  本文已影响0人  wp_Demo

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循环时间的影响.添加在子线程,就可以了.当然这个也要看具体场景了.

上一篇 下一篇

猜你喜欢

热点阅读