iOS監聽RunLoop的狀態改變

    //1.創建監聽者
    /*
     第一個參數:怎么分配存儲空間
     第二個參數:要監聽的狀態 kCFRunLoopAllActivities 所有的狀態
     第三個參數:時候持續監聽
     第四個參數:優先級 總是傳0
     第五個參數:當狀態改變時候的回調
     */
    CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(), kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
        
        /*
         kCFRunLoopEntry = (1UL << 0),        即將進入runloop
         kCFRunLoopBeforeTimers = (1UL << 1), 即將處理timer事件
         kCFRunLoopBeforeSources = (1UL << 2),即將處理source事件
         kCFRunLoopBeforeWaiting = (1UL << 5),即將進入睡眠
         kCFRunLoopAfterWaiting = (1UL << 6), 被喚醒
         kCFRunLoopExit = (1UL << 7),         runloop退出
         kCFRunLoopAllActivities = 0x0FFFFFFFU
         */
        switch (activity) {
            case kCFRunLoopEntry:
                NSLog(@"即將進入runloop");
                break;
            case kCFRunLoopBeforeTimers:
                NSLog(@"即將處理timer事件");
                break;
            case kCFRunLoopBeforeSources:
                NSLog(@"即將處理source事件");
                break;
            case kCFRunLoopBeforeWaiting:
                NSLog(@"即將進入睡眠");
                break;
            case kCFRunLoopAfterWaiting:
                NSLog(@"被喚醒");
                break;
            case kCFRunLoopExit:
                NSLog(@"runloop退出");
                break;
                
            default:
                break;
        }
    });
    
    /*
     第一個參數:要監聽哪個runloop
     第二個參數:觀察者
     第三個參數:運行模式
     */
    CFRunLoopAddObserver(CFRunLoopGetCurrent(),observer, kCFRunLoopDefaultMode);
    
    //NSDefaultRunLoopMode == kCFRunLoopDefaultMode
    //NSRunLoopCommonModes == kCFRunLoopCommonModes
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容