面試整理六(Runloop)

講講Runloop,項目中有用到嗎?

其實Runloop內部就是一個do while循環(huán),這個循環(huán)內部不斷處理各種任務(比如Source, timer, observer),一個線程對應一個runloop,主線程的runloop默認開啟,子線程的runloop需要手動開啟(調用run方法),runloop只能選擇一個mode啟動,如果當前mode中沒有任何source(source0,source1)、timer,那么就直接退出runloop。

Runloop的基本作用:
保持程序的持續(xù)運行
處理APP中的各種事件(比如觸摸事件、定時器事件)
節(jié)省CPU資源,提高程序性能:該做事時做事,該休息時休息

Runloop應用范疇:
定時器(timer)、performSelector
GCD Async Main Queue
事件響應、手勢識別、界面刷新
網絡請求
AutoreleasePool

Runloop在實際項目中應用:
控制線程生命周期(線程?;? AFNetworking就是使用Runloop使子線程保活)
解決NSTimer在滑動時停止工作問題
監(jiān)控應用卡頓
性能優(yōu)化

Runloop的內部實現邏輯

Runloop的內部實現邏輯圖.jpg

Runloop和線程的關系

每一條線程都有唯一的一個與之對應的Runloop對象
Runloop保存在一個全局的Dictionary里,線程作為Key,Runloop作為value
線程剛創(chuàng)建事沒有Runloop對象,Runloop會在第一次獲取它時創(chuàng)建

timer與Runloop的關系,拖動tableView時,timer無法響應要怎么解決

timer是運行在Runloop里的,runloop來控制timer什么時候執(zhí)行。

Runloop是怎么響應用戶操作的,具體流程

說說Runloop的幾種狀態(tài)

Runloop的mode作用是什么

RunLoop的運行模式(一共5種)

  • kCFRunLoopDefaultMode:APP默認mode,通常主線程在這個mode下運行
  • UITrackingRunLoopMode:界面跟蹤mode,用于ScrollView追蹤觸摸滑動,保證界面滑動時不受其他Mode的影響。
  • UIInitializationRunLoopMode:在剛啟動APP時進入的第一個mode,啟動完成后就不在使用
  • GSEventReceiveRunLoopMode:接受系統(tǒng)事件的內部mode,通常用不到
  • kCFRunLoopCommonModes:這是一個占位用的mode,不是一種真正的運行模式
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容