如何在 NSTimer 失效后"validate"它?



因此,基本上,我有一个计时器,当它接收到密钥事件时,它应该重复,当用户释放密钥时,它将无效。但是,即使在NSRunLoop中调用addTimer:forMode:,我也无法"验证"计时器。有人知道为什么会发生这种情况吗?我该怎么解决?谢谢

您不能使用无效计时器。

来自苹果文档:

一旦在运行循环中进行了调度,计时器就会在指定的间隔,直到其无效。非重复计时器无效它在起火后立即自行启动。但是,对于重复计时器必须通过调用其invalidate来使计时器对象无效方法调用此方法请求从电流运行回路;因此,您应该始终调用invalid方法。使计时器无效会立即将其禁用,使其不再影响运行循环。运行循环然后删除并释放计时器,要么在invalide方法返回之前,要么在某个时间稍后的要点。计时器对象一旦失效,就不能再使用。

一旦使NSTimer无效,就不应该再使用它。

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

来自NSTimer文档:

调用此方法请求从当前运行循环;因此,您应该始终调用invalide方法来自安装计时器的同一线程。无效计时器会立即禁用它,这样它就不再影响运行环运行循环然后删除并释放计时器,或者只是在invalide方法返回之前或稍后某个时间点。一旦无效,计时器对象不能重复使用。

最新更新