runloop:運行循環(huán)。跑圈剩膘⌒普叮基本作用:保持程序的基本運行。處理app的各種事件怠褐,比如觸摸事件畏梆,定時器事件,selector事件奈懒。
iOS 中有兩套API來訪問和使用runloop
1.Founfdation奠涌。---->NSrunloop
2.Core Fundation --->CFRunloopref
NSrunloop 和 CFRunloopref 都代表runloop,NSrunloop 是基于CFRunloopref的一層oc包裝。
unloop 和線程的關系:
runloop 和線程: 每條線程都有唯一一個與之對應的runloop對象磷杏,主線程的runloop對象已經(jīng)自動創(chuàng)建好了溜畅,子線程的runloop需要手動去創(chuàng)建。
runloop在第一次獲取時創(chuàng)建极祸,線程結束時銷毀慈格。
獲得runloop 對象。
[NSRunloop CurrentRunLoop];獲取當前線程的runloop對象
[NSRunloop mainRunloop]獲取主線程的runloop對象
runloop的相關類
core fundation 中有5個類遥金。
CFRunloopRef
CFRunloopModeRef(運行模式)
#代表runloop的運行模式峦椰,一個runloop包含若干個mode,每個mode又包含若干個source/timer/observer
#系統(tǒng)默認5個mode
1.KCFRunloopDefaultMode默認mode,通常主線程在這個mode下運行
2.UITrackingRunloopMode界面追蹤mode,用于scroller追蹤觸摸滑動汰规,保證界面滑動不受其他影響。
3.GSEventReceiveRunloopMode 接受系統(tǒng)事件的內(nèi)部mode物邑,通常用不到
4.NSRunLoopCommonModes = NSDefaultRunLoopMode + UITrackingRunLoopMode
//占用,標簽,凡是添加到NSRunLoopCommonModes中的事件都會被同時添加到打上commmon標簽的運行模式上
.......
CFRunloopSourceRef
CFRunloopTimeRef
# 在runloop中有多個運行模式溜哮,但是runloop只能選擇一種模式運行,這個mode被稱為 currentmode
model中至少要有一個timer或者是source滔金,