RunLoop原理模拟

RunLoop是个适时休眠的循环

循环处理定时器、输入源事件

class RunLoop: @unchecked Sendable {
    var timers: [Timer] = []
    
    static let main = RunLoop()
    
    func run() {
        while true {
            timers.filter { timer in
                timer.fireDate.timeIntervalSinceReferenceDate <= CFAbsoluteTimeGetCurrent()
            }.forEach { timer in
                timer.fire()
            }
        }
    }
    
    func add(_ timer: Timer) {
        timers.append(timer)
    }
}