RunLoop相關
1. 概念
- RunLoop是經過內部維護的事件循環來對事件/消息進行管理的一個對象
- 事件循環
- 沒有消息須要處理時,休眠以免資源佔用
- 有消息須要處理時,馬上被喚醒
2. 數據結構
-
CFRunLoop數據結構
- CoreFoundation 框架
- 開源
- CFRunLoop
- pthread —— 與線程一一對應
- currentMode —— CFRunLoopMode
- modes —— NSMutableSet<CFRunLoopMode*>
- currentModes —— NSMutableSet<NSString*>
- currentModeItems —— 由多個Source/Timer/Observer組成的集合
- CFRunLoopMode
- name
- sources0
- sources1
- obverses
- timers
- Source
- Timer
- CFRunLoopTimer —— 和NSTimer是toll-free bridged的
- Observer
- CFRunLoopObeserver
- 觀測時間點
- kCFRunLoopEntry
- kCFRunLoopBeforeTimers
- kCFRunLoopBeforeSources
- kCFRunLoopBeforeWaiting —— 即將從用戶態切換到內核態
- kCFRunLoopAfterWaiting —— 從內核態切換到了用戶態
- kCFRunLoopExit
- 對應關係
-
NSRunLoop多線程
- Foundation框架
- 是對CFRunLoop的封裝,提供了面向對象的API
- CommonMode
- NSRunLoopCommonModes
- CommonMode不是實際存在的
- 是同步Source/Timer/Observer到多個Mode中的一種技術方案
3. 事件循環機制
4. RunLoop與NSTimer
- 列表滑動時timer的工做
5. RunLoop與多線程
- 關係
- 線程和RunLoop是一一對應的
- 線程默認是沒有RunLoop的,第一次獲取時建立
- 實現常駐線程
- 爲當前線程開啓一個RunLoop
- 向RunLoop中添加一個Port/Source等維持RunLoop的事件循環
- 啓動RunLoop
歡迎關注本站公眾號,獲取更多信息