NSTimer精確度不準(zhǔn)的原因

一、造成NSTimer觸發(fā)不準(zhǔn)確的原因

  1. run loops循環(huán)過(guò)程中,被NSTimer觸發(fā)事件阻塞了,導(dǎo)致循環(huán)不能及時(shí)進(jìn)行下去,延誤之后NSTimer觸發(fā)時(shí)間。
  2. run loops循環(huán)過(guò)程中,在某一時(shí)刻主線程發(fā)生了阻塞情況,導(dǎo)致循環(huán)不能及時(shí)進(jìn)行下去,厭惡NSTimer觸發(fā)時(shí)間。
  3. run loops循環(huán)過(guò)程中,發(fā)生了模式的轉(zhuǎn)換,(比如UIScrollView的滑動(dòng)) 導(dǎo)致原有模式下的NSTimer不會(huì)正常觸發(fā)。

以上情況都是由于NSTimer所依賴的run loops會(huì)被多種原因干擾正常循環(huán),所以要想解決NSTimer精度問(wèn)題,就要避免所依賴的run loops被外界干擾。

  • 注意:雖然第三種情況可以指定NSTimer所處模式為NSRunLoopCommonModes,但是這種解決方法并不能改變run loops在特定模式下不能處理其余模式事件的本質(zhì)。

二、終極解決辦法

  • 盡量避免將NSTimer放入容易受到影響的主線程run loops中。
  • 盡量避免將耗時(shí)操作放入NSTimer依賴的線程中。
  • 盡量避免在NSTimer觸發(fā)事件中進(jìn)行耗時(shí)操作,如果不能避免,將耗時(shí)操作移至其余線程進(jìn)行。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容