根据之前的经验总结,
runloop,线程,滑动scrollerview 都会影响nastimer的掉用。
讲述着四者之间的影响,说先从runloop说起,runloop是消息机制,iOS中的消息机制就是runloop,他就是循环监测消息事件,举个例子说就是,当我们点击手机屏幕时,手机会监测到我们的操作事件,对这个监测的封装就是runloop,他是对iOS底层复杂的事件消息监测的封装,当我们不点击时,runloop处于睡眠状态,当我们点击时,runloop时苏醒的状态,所以我们用runloop时其中有一个中情况就是,用的时候响应,不用的时候睡眠。
nstimer是iOS的定时器,他会自动加到当前的runloop中,每一个线程都有一个runloop,由于我们自己创建的分线程中的runloop是睡眠状态,所以在分线程中的nstimer是不会掉用的。所以我们一般是将nstimer写到主线程中,因为当我们的app启动时,主线程已经开始,主线程中的runloop已经苏醒,能监测到我们的操作,所以nstimer写到主线程中是可以正常掉用的,要是非得写到分线程中,除非让分线程中的runloop也是苏醒状态,iOS中两个线程都 处于苏醒状态,对手机性能cpu消耗会很大,电池也会很大消耗,手机寿命也会减少。在项目设计时,一般不应该存在这样的现象。
当我们滑动scrollerview或者时tableview时,nastier也会停止,这个原因简单,是因为当我们滑动的时候时,nastimer的mode会时NSDefaultRunLoopMode,我们手动调成NSRunLoopCommonModes即可。