CFRunLoop 對象監控任務(task)的輸入源,並在它們爲處理作好準備的時候調度控制。輸入源樣例可能包括用戶輸入設備、網絡連接、按期或時間延遲事件,還有異步回調。 有3類對象能夠被run loop監控:sources、timers、observers。 當這些對象須要處理的時候,爲了接收回調,首先必須經過 CFRunLoopAddSource,CFRunLoopAddTimer, or CFRunLoopAddObserver把這些對象放入run loop。 要中止接收它的回調,你也能夠稍候經過CFRunLoopRemoveSource從run loop中移除某個對象。 run loop有不一樣的運行模式,每種模式都有其自身的對象集,run loop監控,同時在該模式下運行。 Core Foundation定義了一種默認模式kCFRunLoopDefaultMode來持有對象,在應用或線程閒置的時候這些對象應該被監控。當一個對象被添加到不認識的模式時,額外模式自動建立。每一個run loop有它本身獨立的模式集。 Core Foundation還定義了一個特殊的僞模式kCFRunLoopCommonModes來持有應當被「common」模式集共享的對象。 經過調用CFRunLoopAddCommonMode來添加一個模式到「common」模式集。 默認模式kCFRunLoopDefaultMode 老是common模式集中的一個成員。kCFRunLoopCommonModes 常數決不會傳給CFRunLoopRunInMode。每一個run loop有它本身獨立的common模式集。 每一個線程剛好有一個run loop,既不能夠建立,也不能銷燬線程的run loop。,Core Foundation 根據須要爲你建立。經過CFRunLoopGetMain 你能夠得到當前線程的run loop。調用lCFRunLoopRun 來使當前線程的run loop以默認模式運行起 來,直到調用CFRunLoopStop來中止run loop。你也能夠調用CFRunLoopRunInMode來使當前線程的run loop以指定模式運行起來一段時間或者直到run loop被中止。 run loop只能在請求模式至少有一個source或者timer可監控的狀況下運行起來。 run loop能夠遞歸運行,你能夠在任何run loop 標註內部調用CFRunLoopRun 或 CFRunLoopRunInMode,還能夠建立嵌套run loop,並在當前線程調用棧激活,在標註內並無限制在那種模式能夠運行。你能夠建立另外一個run loop,激活運行在任何可行的run loop模式,包括任何已經運行在調用堆棧中的更高的模式。 Cocoa 和 Carbon 每一個都是創建在 CFRunLoop上來實現它們本身更高級別的事件循環。當編寫一個 Cocoa 或者 Carbon 應用,你能夠添加你的sources、timer和observers到它們的run loop對象中。你的對象將會做爲常規應用事件循環的一部分來獲得監控。使用 NSRunLoop 實例方法 getCFRunLoop 來得到對應應於cocoa run loop的CFRunLoop,在carbon應用中使用 GetCFRunLoopFromEventLoop 函數.