學(xué)習(xí)sunny視頻筆記
Why Run Loops?
- 使程序一直運行并接受用戶輸入
- 決定程序在何時應(yīng)該處理哪些事件(Event)
- 調(diào)用解耦(Message Queue)
- 節(jié)省CPU時間
RunLoop in Cocoa

RunLoop in Cocoa-1.png

RunLoop in Cocoa-2.png

RunLoop in Cocoa-3.png

Callouts.png

RunLoop機制.png
CFRunLoopSource
- Source是RunLoop的數(shù)據(jù)源抽象類(protocol)
- RunLoop定義了2個版本的Source:
- Source0:處理app內(nèi)部事件,app自己負責管理(觸發(fā)),如UIEvent,CFSocket。
- Source1:由RunLoop和內(nèi)核管理,Mach port驅(qū)動,CFMachPort,CFMessagePort。
- 如有需要,可從中選擇一種實現(xiàn)自己的Source。
- 上一條基本不會發(fā)生。
CFRunLoopObserver

CFRunLoopObserver-1.png

CFRunLoopObserver-2.png
CFRunLoopMode
- Runloop在同一段時間只能且必須在一種Mode下run
- 更換Mode時,需要停止當前的Loop,開啟新Loop
- Mode是app滑動順暢的關(guān)鍵
- 可以定制自己的Mode
幾種模式:
- NSDefaultRunLoopMode: 默認狀態(tài),空閑狀態(tài)
- UITrackingRunLoopMode: 滾動scrollview狀態(tài)
- UIInitializationRunLoopMode: 私有,app啟動時
- NSRunLoopCommonModes: mode集合

CFRunLoopMode-1.png

CFRunLoopMode-2.png

CFRunLoopMode-3.png

CFRunLoopMode-4.png

CFRunLoopMode-5.png

CFRunLoopMode-6.png
實踐

1.png

2.png

3.png

4.png

5.png

6.png