當(dāng)tableview/scrollview滾動(dòng)時(shí)定時(shí)器NSTimer / CADisplayLink停止響應(yīng)問題

https://blog.csdn.net/huxinguang_ios/article/details/51045810

要解決這個(gè)問題需要了解一下runloop的知識(shí)。runloop可以理解為cocoa下的一種消息循環(huán)機(jī)制,用來處理各種消息事件,我們并不需要手動(dòng)去創(chuàng)建一個(gè)runloop,因?yàn)榭蚣転槲覀儎?chuàng)建了一個(gè)默認(rèn)的runloop,通過 [NSRunloop currentRunloop] 我們可以得到當(dāng)前線程下面對(duì)應(yīng)的runloop對(duì)象,不過我們需要注意的是不同的runloop之間消息的通知方式。在開啟一個(gè)NSTimer或CADisplayLink實(shí)質(zhì)上是在當(dāng)前的runloop中注冊(cè)了一個(gè)新的事件源,而當(dāng)scrollView滾動(dòng)的時(shí)候,當(dāng)前的MainRunLoop是處于 UITrackingRunLoopMode 的模式下,在這個(gè)模式下,是不會(huì)處理 NSDefaultRunLoopMode 的消息(因?yàn)樗鼈兊腞unLoop Mode不一樣)。

解決辦法

要想在scrollview/tableview滾動(dòng)的同時(shí)也接受其它runloop的消息,不管是定時(shí)器采用NSTimer還是CADisplayLink,在把定時(shí)器加入到runloop時(shí),Mode參數(shù)設(shè)置不能設(shè)置為 NSDefaultRunLoopMode,而應(yīng)設(shè)置為 NSRunLoopCommonModes 。

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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