所以基本上,我有这个计时器,当它收到一个按键事件时应该重复这个计时器,并在用户释放按键时失效。addTimer:forMode:
但是,即使通过调用NSRunLoop ,我也无法“验证”计时器。有谁知道为什么会这样以及我该如何解决这个问题?谢谢。
2 回答
您不能使用无效的计时器。
来自苹果文档:
一旦安排在运行循环上,计时器就会以指定的时间间隔触发,直到它失效。非重复计时器在触发后立即使自己失效。但是,对于重复计时器,您必须自己通过调用其 invalidate 方法来使计时器对象无效。调用此方法请求从当前运行循环中移除计时器;因此,您应该始终从安装了计时器的同一线程调用 invalidate 方法。使计时器无效会立即将其禁用,以便它不再影响运行循环。然后,运行循环会在 invalidate 方法返回之前或稍后的某个时间删除并释放计时器。一旦失效,定时器对象就不能被重用。
一旦你使一个 NSTimer 失效,你就不应该再次使用它。
相反,创建一个新的计时器实例,并使用该实例添加到 NSRunLoop 的 addTimer 方法。就我个人而言,我更喜欢只调用 NSTimer 的 scheduleTimerWithTimeInterval 因为它一次完成所有事情。
来自 NSTimer文档:
调用此方法请求从当前运行循环中移除计时器;因此,您应该始终从安装了计时器的同一线程调用 invalidate 方法。使计时器无效会立即将其禁用,以便它不再影响运行循环。然后,运行循环会在 invalidate 方法返回之前或稍后的某个时间删除并释放计时器。一旦失效,定时器对象就不能被重用。