在 CoreFoundation 里面關(guān)于 RunLoop 有5個(gè)類:
CFRunLoopRef
CFRunLoopModeRef
CFRunLoopSourceRef
CFRunLoopTimerRef 基于時(shí)間的觸發(fā)器,基本上說(shuō)的就是NSTimer
CFRunLoopObserverRef`
其中 CFRunLoopModeRef 類并沒有對(duì)外暴露,只是通過 CFRunLoopRef 的接口進(jìn)行了封裝哪自。
關(guān)系如下:
一個(gè) RunLoop 包含若干個(gè) Mode蜕径,每個(gè) Mode 又包含若干個(gè) Source/Timer/Observer。
每次調(diào)用 RunLoop 的主函數(shù)時(shí)展融,只能指定其中一個(gè) Mode,這個(gè)Mode被稱作 CurrentMode。
如果需要切換 Mode密末,只能退出 Loop,再重新指定一個(gè) Mode 進(jìn)入跛璧。這樣做主要是為了分隔開不同組的 Source/Timer/Observer严里,讓其互不影響。
Source/Timer/Observer 被統(tǒng)稱為 mode item追城,一個(gè) item 可以被同時(shí)加入多個(gè) mode刹碾。但一個(gè) item 被重復(fù)加入同一個(gè) mode 時(shí)是不會(huì)有效果的。如果一個(gè) mode 中一個(gè) item 都沒有座柱,則 RunLoop 會(huì)直接退出迷帜,不進(jìn)入循環(huán)。
- RunLoopSourceRef
- RunLoopTimerRef
- RunLoopObserverRef
- RunLoopMode