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