iOS runloop(二)

作者: BEYOND黄 | 来源:发表于2017-05-30 23:34 被阅读12次

1.CFRunloopSourceRef

1.是事件源也就是输入源,有两种分类模式;

一种是按照苹果官方文档进行划分的

另一种是基于函数的调用栈来进行划分的(source0和source1)。

2.具体的分类情况

(1)以前的分法

Port-Based Sources

Custom Input Sources

Cocoa Perform Selector Sources

(2)现在的分法

Source0:非基于Port的 用户主动触发的事件

Source1:基于Port的   系统通知的事件

3.可以通过打断点的方式查看一个方法的函数调用栈

2.CFRunLoopObserverRef

(1)CFRunLoopObserverRef是观察者,能够监听RunLoop的状态改变

(2)如何监听

//创建一个runloop监听者

CFRunLoopObserverRef observer = CFRunLoopObserverCreateWithHandler(CFAllocatorGetDefault(),kCFRunLoopAllActivities,YES,0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {

NSLog(@"监听runloop状态改变---%zd",activity);

});

//为runloop添加一个监听者

CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);

CFRelease(observer);

(3)监听的状态

typedefCF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {

kCFRunLoopEntry = (1UL <<0),//即将进入Runloop

kCFRunLoopBeforeTimers = (1UL <<1),//即将处理NSTimer

kCFRunLoopBeforeSources = (1UL <<2),//即将处理Sources

kCFRunLoopBeforeWaiting = (1UL <<5),//即将进入休眠

kCFRunLoopAfterWaiting = (1UL <<6),//刚从休眠中唤醒

kCFRunLoopExit = (1UL <<7),//即将退出runloop

kCFRunLoopAllActivities =0x0FFFFFFFU//所有状态改变

};

3.Runloop运行逻辑 

相关文章

网友评论

    本文标题:iOS runloop(二)

    本文链接:https://www.haomeiwen.com/subject/jckdfxtx.html