iOS_RunLoop_CFRunLoopObserver

CFRunLoopObserver监听者,runloop事件。

public struct CFRunLoopActivity : OptionSet, @unchecked Sendable {

    public init(rawValue: CFOptionFlags)

    public static var entry: CFRunLoopActivity { get }

    public static var beforeTimers: CFRunLoopActivity { get }

    public static var beforeSources: CFRunLoopActivity { get }

    public static var beforeWaiting: CFRunLoopActivity { get }

    public static var afterWaiting: CFRunLoopActivity { get }

    public static var exit: CFRunLoopActivity { get }

    public static var allActivities: CFRunLoopActivity { get }
}

entry:即将进入运行循环
beforeTimers:即将处理timers
beforeSources:即将处理sources
beforeWaiting:即将等待,即将进入休眠
afterWaiting:休眠之后,刚从休眠唤醒
exit:退出runloop循环

观察runloop的状态变化

public func CFRunLoopObserverCreateWithHandler(
_ allocator: CFAllocator!,//分配的空间
_ activities: CFOptionFlags, //要监听的状态
_ repeats: Bool, 
_ order: CFIndex, 
_ block: ((CFRunLoopObserver?, CFRunLoopActivity) -> Void)!) 
-> CFRunLoopObserver!
let actitities = CFRunLoopActivity.allActivities //actitities 传入要监听的所有状态
        let allocator =  CFAllocatorGetDefault().takeUnretainedValue()
        let observer =  CFRunLoopObserverCreateWithHandler(allocator, 
                                                           actitities.rawValue,
                                                           true,
                                                           0) { observer, activity in
            switch activity {
            case .entry :
                print("进入runloop循环")
            case .beforeTimers:
                print("即将处理timers")
            case .beforeSources:
                print("即将处理Source")
            case .beforeWaiting:
                print("即将休眠")
            case .afterWaiting:
                print("刚从休眠唤醒")
            case .exit:
                print("runloop循环结束")
            default:
                break
            }
        }
        CFRunLoopAddObserver(runloop, observer, .defaultMode)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Runloop是iOS和OSX开发中非常基础的一个概念,从概念开始学习。 RunLoop的概念 -般说,一个线程一...
    小猫仔阅读 4,605评论 0 1
  • iOS 中RunLoop 是一个事件循环对象 runloop跑一圈,只能执行一个事件。 一般一个线程执行任务完成后...
    小李不木阅读 3,730评论 0 0
  • RunLoop这个名词对于iOS开发来说应该是一个听腻了的词汇,而且只知其一不知其二,本篇章就来再深入复习一下Ru...
    ios开发闻闻阅读 4,929评论 1 15
  • 深入理解RunLoop 由ibireme| 2015-05-18 |iOS,技术 RunLoop 是 iOS 和 ...
    橙娃阅读 4,359评论 1 2
  • 转自bireme,原地址:https://blog.ibireme.com/2015/05/18/runloop/...
    乜_啊_阅读 5,405评论 0 5