RunLoop知識體系
RunLoop系列(下面的文章總結的很全面钠龙,借用一下??)
深入淺出 RunLoop(一):初識
深入淺出 RunLoop(二):數(shù)據(jù)結構
深入淺出 RunLoop(三):事件循環(huán)機制
深入淺出 RunLoop(四):RunLoop 與線程
深入淺出 RunLoop(五):RunLoop 與 NSTimer
iOS - 聊聊 autorelease 和 @autoreleasepool:RunLoop 與 @autoreleasepool
什么是RunLoop辰企?
RunLoop是通過內(nèi)部維護的 事件循環(huán) 來對 事件/消息進行管理 的一個對象擒滑。
事件循環(huán)可以達到:
有消息時人柿,立即喚醒馁菜。
內(nèi)核態(tài)>>>>>用戶態(tài)
無消息時,休眠避免資源占用
用戶態(tài)>>>>>內(nèi)核態(tài)
WeChat9b3c513a88fe004276e24aa359c708c9.png
main函數(shù)如何保持一直運行不退出的最爬?
在main函數(shù)中會調(diào)用UIApplicationMain函數(shù)內(nèi)部會啟用主線程的RunLoop運行循環(huán)涉馁,而RunLoop又是對事件循環(huán)的維護機制,有消息時爱致,立即喚醒
這里的烤送,無消息時,休眠避免資源占用糠悯,使當前線程處于一個休眠的狀態(tài)帮坚,從而保證不退出
RunLoop的數(shù)據(jù)結構
NSRunLoop是CFRunLoop的封裝,提供了面向?qū)ο蟮腶pi
CFRunLoop包含了
- pthread
- currentMode
- modes
- commonModes
- cmomonModeltems
source0
需要手動喚醒線程
source1
具備喚醒線程的能力
531617634384_.pic_hd.jpg
RunLoop的Mode
RunLoop與NSTimer
需要將NSTimer加入到RunLoop當中并設置mode
RunLoop與線程之間的關系