CFRunloopObserverRef

(1)CFRunLoopObserverRef是觀察者,能夠監(jiān)聽RunLoop的狀態(tài)改變

(2)如何監(jiān)聽

 //創(chuàng)建一個runloop監(jiān)聽者
    CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(),kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {

        switch (activity) {
             case kCFRunLoopEntry:
                 NSLog(@"即將進(jìn)入runloop");
                 break;
             case kCFRunLoopBeforeTimers:
                 NSLog(@"即將處理timer事件");
                 break;
             case kCFRunLoopBeforeSources:
                 NSLog(@"即將處理source事件");
                 break;
             case kCFRunLoopBeforeWaiting:
                 NSLog(@"即將進(jìn)入到休眠狀態(tài)");
                 break;
             case kCFRunLoopAfterWaiting:
                 NSLog(@"被喚醒");
                 break;
             case kCFRunLoopExit:
                 NSLog(@"runloop已經(jīng)推出");
                 break;
             default:
                 break;
         }
;
    });

    //為runloop添加一個監(jiān)聽者
    /*
     第一個參數(shù):要監(jiān)聽的對象
     第二個參數(shù):CFRunLoopObserverRef 觀察者
     第三個參數(shù):哪種運行模式下面的狀態(tài)
     */
    CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);

    //釋放觀察者
    CFRelease(observer);

(3)監(jiān)聽的狀態(tài)

/*
    _wrapRunLoopWithAutoreleasePoolHandler
    activities = 0x1 ----->1
    activities = 0xa0----->160 = 32+128
     */

    //Runloop的自動釋放池是什么時候創(chuàng)建和銷毀的
    /*
     第一次創(chuàng)建:當(dāng)runloop開啟的時候
     最后一次銷毀:kCFRunLoopExit 當(dāng)runloop退出的時候
     其他:當(dāng)runloop即將休眠的時候會把之前的自動釋放池銷毀,然后創(chuàng)建一個新的自動釋放池
     */
typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
    kCFRunLoopEntry = (1UL << 0),   //即將進(jìn)入Runloop
    kCFRunLoopBeforeTimers = (1UL << 1),    //即將處理NSTimer
    kCFRunLoopBeforeSources = (1UL << 2),   //即將處理Sources
    kCFRunLoopBeforeWaiting = (1UL << 5),   //即將進(jìn)入休眠
    kCFRunLoopAfterWaiting = (1UL << 6),    //剛從休眠中喚醒
    kCFRunLoopExit = (1UL << 7),            //即將退出runloop
    kCFRunLoopAllActivities = 0x0FFFFFFFU   //所有狀態(tài)改變
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 先貼下 apple doc, 本文基本是對照 doc 的翻譯:https://developer.apple.co...
    brownfeng閱讀 7,113評論 8 111
  • RunLoop 文章目錄 RunLoop簡介 1.1 什么是RunLoop? 1.2 RunLoop和線程 1.3...
    May_d8f1閱讀 342評論 0 1
  • 1 RunLoop簡介 神秘的RunLoop。一個應(yīng)用開始運行以后放在那里,如果不對它進(jìn)行任何操作,這個應(yīng)用就像靜...
    Claire_wu閱讀 1,874評論 3 30
  • RunLoop的基本了解 **1 . RunLoop字面的意思 : **運行循環(huán) / 跑圈 **2 . 基本作用 ...
    Mario_ZJ閱讀 591評論 1 3
  • 如果沒有RunLoop main函數(shù)中的RunLoop 第14行代碼的UIApplicationMain函數(shù)內(nèi)部就...
    JonesCxy閱讀 662評論 0 4

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