Runloop源碼 https://opensource.apple.com/tarballs/CF/
Runloop與線程
- 每條線程都有唯一的一個(gè)與之對應(yīng)的Runloop對象
- Runloop保存在一個(gè)全局的Dictionary里壁袄,線程為key,runloop為value
- 線程剛創(chuàng)建時(shí)并沒有runloop對象媚媒,runloop會在第一次獲取它時(shí)創(chuàng)建
- Runloop會在線程結(jié)束時(shí)銷毀
Runloop對象結(jié)構(gòu)
Runloop幾種狀態(tài)
typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
kCFRunLoopEntry = (1UL << 0),
kCFRunLoopBeforeTimers = (1UL << 1),
kCFRunLoopBeforeSources = (1UL << 2),
kCFRunLoopBeforeWaiting = (1UL << 5),
kCFRunLoopAfterWaiting = (1UL << 6),
kCFRunLoopExit = (1UL << 7),
kCFRunLoopAllActivities = 0x0FFFFFFFU
};
Runloop應(yīng)用
- 控制線程生命周期(線程笔嚷撸活)
- 解決NSTimer在滑動時(shí)停止工作的問題
- 監(jiān)控應(yīng)用卡頓
- 性能優(yōu)化