//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
iOS監聽RunLoop的狀態改變
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 【蝴蝶效應】 蝴蝶效應:上個世紀70年代,美國一個名叫洛倫茲的氣象學家在解釋空氣系統理論時說,亞馬遜雨林一只蝴蝶...
- 人有五感,視聽味嗅觸,各有千秋。 有些感覺是相互的,有些感覺是獨立而存在的。有些感覺相對被動,有些感覺是主觀上的。...