如何在使NSTimer失效后"验证"它?

The*_*mer 21 cocoa objective-c nstimer nsrunloop

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

Nek*_*kto 37

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

来自Apple Docs:

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


Mic*_*nen 14

一旦您使NSTimer无效,就不应再使用它.

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

来自NSTimer的文档:

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