經典問題:在tableView的cell上加載高清大圖,tableView上有很多這樣的cell,也就是說 頁面展示的時候,要展示大量高清大圖。
普通的寫法會造成刷新UI耗費大量時間,使主線程阻塞。給用戶直觀的體驗就是頁面卡頓
所以這里為了解決這個問題,使用runloop,在runloop進入等待之前的這段空閑時間刷新UI,這樣做會使刷新UI的時機稍微向后挪了一點時間,但卡頓問題也不會有稍微提一下runloop ,runloop 最直觀的作用:
1、保證程序的運行,不退出。
2、負責事件的監聽(主要包括:觸摸(UI界面的交互)、時鐘事件、網絡事件)。
3、負責渲染屏幕上的所有UI(一次runloop循環需要渲染屏幕上所有UI變化點)。
runloop 的模式(runloop有兩種模式):
1、默認模式 NSDefaultRunLoopMode 蘋果推薦將定時器等放到這個模式下
2、UI模式 NSRunLoopCommonModes 該模式通常用于界面刷新、UI交互等
兩種模式有優先級的問題,第二種模式的優先級要高,所以定時器放在第一種模式下,當用戶和UI進行交互的的時候,定時器是不工作的,結束后才會馬上進入定時器事件那么問題來了,刷新UI要放在哪?
毫無疑問,肯定是主線程,但是還有一個問題,刷新UI 如果也是一個耗時操作,那么也會有卡頓問題
基于以上問題,提出運用runloop優化卡頓問題。
使用runloop優化卡頓的主要難點,在于如何監聽runloop的運行狀態,以及方法的保存和runloop任務的執行
runloop的運行狀態可以通過CoreFoundation解決,CoreFoundation是一個c語言的庫。下載地址:http://download.csdn.net/download/u011604049/9751591當初上傳的時候 選了個1分的下載分,沒分的直接聯系我,我發給你
好了,原理就是上面的原理,代碼有空我再發出來,著急的可以直接私我。
新聞熱點
疑難解答