RunLoop簡介
Hello,大家好.今天給大家來個RunLoop知識點簡介,讓你痛快的快速了解什么是所謂的RunLoop.
所謂Run Loop就是一個循環(huán),在iOS開發(fā)中我們的進程(APP)之所以能運行起來不會掛掉那是因為蘋果給我們的程序加了個Run Loop死循環(huán)讓這個程序一直在跑圈圈.我們看看蘋果官方文檔給的圖片,下圖清楚解釋RunLoop的概念結構以及各種源.
那么RunLoop作用是什么呢?
①讓你的進程(APP)保持運行不會被掛掉
②處理與用戶交互的各種事件(例如點擊,定時,Selector事件)
③提高程序性能,該干活干活該睡覺睡覺
RunLoop底層實現(xiàn)原理
RunLoop接收輸入事件的2種來源
①輸入源(input source) ②定時源(timer source).
輸入源: 傳遞異步事件,通常消息來自于其他線程或程序(進程).
定時源:傳遞同步事件,在特定的時間或者重復的時間間隙.
除了處理輸入源,run loops 也會生成關于 run loop 行為的通知 (notifications)。注冊的 run loop 觀察者(run-loop Observers)可以收到這些通知, 并在線程上面使用它們來做額外的處理。你可以使用 Core Foundation 在你的線程注 冊 run-loop 觀察者脆炎。
RunLoop對象
iOS中有2套API訪問使用RunLoop
①OOP中Foundation框架下的NSRunLoop
②C語言中Core Foundation框架下的CFRunLoop
注意點!他們都代表RunLoop對象只不過NSRunLoop是蘋果幫我們加了層OC包裝給CFRunLoop
開源的CFRunLoop地址:
http://opensource.apple.com/source/CF/CF-1151.16/
CFRunLoop中的五個類
①CFRunLoopRef
②CFRunLoopModeRef
③CFRunLoopSourceRef
④CFRunLoopTimerRef
⑤CFRunLoopObserverRef
對CFRunLoop幾個類的認識
①CFRunLoopModeRef代表了RunLoop的運行模式,每次RunLoop啟動時候我們稱為CurrentMode,只能指定一個.因為一個RunLoop包含很多的Model,每個Model中又包含Source/Timer/Observer若干個,這樣實現(xiàn)的原理是因為讓不同Model中的Source/Timer/Observer互相不干擾.
②系統(tǒng)默認注冊了5個類簡介如下圖,我們一般情況下使用kCFRunLoopCommonModes: 這是一個占位用的Mode,不是一種真正的Mode但是他擁有(UITrackingRunLoopMode與kCFRunLoopDefaultMode兩種功能)