iOS_RunLoop_CFRunLoopObserver

CFRunLoopObserver監(jiān)聽者,runloop事件。

public struct CFRunLoopActivity : OptionSet, @unchecked Sendable {

    public init(rawValue: CFOptionFlags)

    public static var entry: CFRunLoopActivity { get }

    public static var beforeTimers: CFRunLoopActivity { get }

    public static var beforeSources: CFRunLoopActivity { get }

    public static var beforeWaiting: CFRunLoopActivity { get }

    public static var afterWaiting: CFRunLoopActivity { get }

    public static var exit: CFRunLoopActivity { get }

    public static var allActivities: CFRunLoopActivity { get }
}

entry:即將進(jìn)入運(yùn)行循環(huán)
beforeTimers:即將處理timers
beforeSources:即將處理sources
beforeWaiting:即將等待,即將進(jìn)入休眠
afterWaiting:休眠之后,剛從休眠喚醒
exit:退出runloop循環(huán)

觀察runloop的狀態(tài)變化

public func CFRunLoopObserverCreateWithHandler(
_ allocator: CFAllocator!,//分配的空間
_ activities: CFOptionFlags, //要監(jiān)聽的狀態(tài)
_ repeats: Bool, 
_ order: CFIndex, 
_ block: ((CFRunLoopObserver?, CFRunLoopActivity) -> Void)!) 
-> CFRunLoopObserver!
let actitities = CFRunLoopActivity.allActivities //actitities 傳入要監(jiān)聽的所有狀態(tài)
        let allocator =  CFAllocatorGetDefault().takeUnretainedValue()
        let observer =  CFRunLoopObserverCreateWithHandler(allocator, 
                                                           actitities.rawValue,
                                                           true,
                                                           0) { observer, activity in
            switch activity {
            case .entry :
                print("進(jìn)入runloop循環(huán)")
            case .beforeTimers:
                print("即將處理timers")
            case .beforeSources:
                print("即將處理Source")
            case .beforeWaiting:
                print("即將休眠")
            case .afterWaiting:
                print("剛從休眠喚醒")
            case .exit:
                print("runloop循環(huán)結(jié)束")
            default:
                break
            }
        }
        CFRunLoopAddObserver(runloop, observer, .defaultMode)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Runloop是iOS和OSX開發(fā)中非?;A(chǔ)的一個(gè)概念,從概念開始學(xué)習(xí)。 RunLoop的概念 -般說,一個(gè)線程一...
    小貓仔閱讀 1,105評(píng)論 0 1
  • iOS 中RunLoop 是一個(gè)事件循環(huán)對(duì)象 runloop跑一圈,只能執(zhí)行一個(gè)事件。 一般一個(gè)線程執(zhí)行任務(wù)完成后...
    小李不木閱讀 655評(píng)論 0 0
  • RunLoop這個(gè)名詞對(duì)于iOS開發(fā)來說應(yīng)該是一個(gè)聽膩了的詞匯,而且只知其一不知其二,本篇章就來再深入復(fù)習(xí)一下Ru...
    ios開發(fā)聞聞閱讀 1,326評(píng)論 1 15
  • 深入理解RunLoop 由ibireme| 2015-05-18 |iOS,技術(shù) RunLoop 是 iOS 和 ...
    橙娃閱讀 960評(píng)論 1 2
  • 轉(zhuǎn)自bireme,原地址:https://blog.ibireme.com/2015/05/18/runloop/...
    乜_啊_閱讀 1,673評(píng)論 0 5

友情鏈接更多精彩內(nèi)容