为什么此 Timer/RunLoop 代码有效?不应该
Why does this Timer/RunLoop code work? It shouldn’t
class A: Timer {
var myTimer: Timer!
}
class TimerTestViewController: UIViewController {
var a = A()
override func viewDidLoad() {
super.viewDidLoad()
a.myTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerRun), userInfo: nil, repeats: true)
RunLoop.current.add(a, forMode: RunLoop.Mode.common)
a.myTimer.fire()
}
}
请注意 RunLoop.current.add(a, forMode: .common)
我没有将 a.myTimer
添加到 runloop,而是“不小心”将 a
添加到 runloop。
为什么这段代码有效?
scheduledTimer
已经将 Timer
添加到 RunLoop
,这就是为什么下一行甚至不需要。
见Timer.scheduledTimer(timeInterval:target:selector:userInfo:repeats:)
Creates a timer and schedules it on the current run loop in the default mode.
第二行以 a
传递,只是因为您已将 A
声明为 Timer
,这可能是一个错误:
// A should not be a Timer!
class A: Timer {
class A: Timer {
var myTimer: Timer!
}
class TimerTestViewController: UIViewController {
var a = A()
override func viewDidLoad() {
super.viewDidLoad()
a.myTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerRun), userInfo: nil, repeats: true)
RunLoop.current.add(a, forMode: RunLoop.Mode.common)
a.myTimer.fire()
}
}
请注意 RunLoop.current.add(a, forMode: .common)
我没有将 a.myTimer
添加到 runloop,而是“不小心”将 a
添加到 runloop。
为什么这段代码有效?
scheduledTimer
已经将 Timer
添加到 RunLoop
,这就是为什么下一行甚至不需要。
见Timer.scheduledTimer(timeInterval:target:selector:userInfo:repeats:)
Creates a timer and schedules it on the current run loop in the default mode.
第二行以 a
传递,只是因为您已将 A
声明为 Timer
,这可能是一个错误:
// A should not be a Timer!
class A: Timer {