23

所以基本上,我有这个计时器,当它收到一个按键事件时应该重复这个计时器,并在用户释放按键时失效。addTimer:forMode:但是,即使通过调用NSRunLoop ,我也无法“验证”计时器。有谁知道为什么会这样以及我该如何解决这个问题?谢谢。

4

2 回答 2

39

您不能使用无效的计时器。

来自苹果文档:

一旦安排在运行循环上,计时器就会以指定的时间间隔触发,直到它失效。非重复计时器在触发后立即使自己失效。但是,对于重复计时器,您必须自己通过调用其 invalidate 方法来使计时器对象无效。调用此方法请求从当前运行循环中移除计时器;因此,您应该始终从安装了计时器的同一线程调用 invalidate 方法。使计时器无效会立即将其禁用,以便它不再影响运行循环。然后,运行循环会在 invalidate 方法返回之前或稍后的某个时间删除并释放计时器。一旦失效,定时器对象就不能被重用。

于 2012-02-13T07:43:11.907 回答
14

一旦你使一个 NSTimer 失效,你就不应该再次使用它。

相反,创建一个新的计时器实例,并使用该实例添加到 NSRunLoop 的 addTimer 方法。就我个人而言,我更喜欢只调用 NSTimer 的 scheduleTimerWithTimeInterval 因为它一次完成所有事情。

来自 NSTimer文档

调用此方法请求从当前运行循环中移除计时器;因此,您应该始终从安装了计时器的同一线程调用 invalidate 方法。使计时器无效会立即将其禁用,以便它不再影响运行循环。然后,运行循环会在 invalidate 方法返回之前或稍后的某个时间删除并释放计时器。一旦失效,定时器对象就不能被重用。

于 2012-02-13T07:42:43.130 回答