CFRunLoop OverView 学习(翻译)

CFRunLoop 是一个当监听信号源输入,然后分发控制的对象。包含:用户输入,网络变化,生命周期,延迟事件,还有异步回调等。

这个循环池能够监听3种事件来源。

1:CFRunLoopSource 会调用CFRunLoopAddSource(_:_:_:) 这个方法加入到循环池。

2:CFRunLoopTimer  会调用CFRunLoopAddTimer(_:_:_:) 这个方法加入到循环池。

3:CFRunLoopObserver 会调用CFRunLoopAddObserver(_:_:_:) 这个方法加入到循环池。

一旦上述的事件发送消息,你必须马上将这个事件加入循环池。当然,你也可以通过稍后删除这个对象,或者让这个事件永远不响应。从而不会再受到这个事件的回调。

事件,timer事件,观察者通知一旦加入都必须设置一个或者多个loop模式。每次运行循环都运行在特定的模式下,而且只会响应相应模式下的事件。你尽可能的设置defaultMode 这个模式,因为它当应用是在闲置的时候,运行循环就是这个模式。系统它会定义一些其他的模式,用以来闲置有写信号来源。毕竟运行循环的标示只是指定为一个字符串。当然,你也可以自定义自己的运行模式,来限制去触发一些事件。

Core Foundation 框架定义了一个假的模式(common)。这个模式下对应事件源你可以关联多个模式。commonModes,defaultMode 都只是众多模式中的一个。你可以调用CFRunLoopAddCommonMode(_:_:) 这个方法加入自己自定义的模式到运行循环。

每一个线程都有一个运行循环,你能创建和销毁线程的运行循环。Core Foundation 会帮你自动创建线程的运行循环。当run Loop模式下至少有一个事件,那就必须执行。

CFRunLoopGetCurrent() 获得当前线程

CFRunLoopRun() 运行当前线程的run Loop

CFRunLoopStop(_:) 停止当前线程的run Loop

CFRunLoopRunInMode(_:_:_:) 运行当前线程,并指定相应的Model

Run loops 能够递归调用,你能在任意的run Loop 里面创建,嵌套其他的run Loop。

Cocoa 创建了比CFRun Loop 更高级别事件循环,

你可能感兴趣的:(CFRunLoop OverView 学习(翻译))