如何取消已解雇的非重复NSTimer?

时间:2012-05-14 13:38:18

标签: iphone ios nstimer invalidation

我想要什么
1)UIImageViews中的4个拼图图像,我可以四处移动 2)解决谜题之后我想要显示2个图像而不是谜题:第一个在谜题解决之后,第二个在第一个图像后2秒......

我有什么:
1)如果你正在快速地解决一个又一个拼图,你可能会陷入NSTimer间隔,这会将这两个图像交换得太快,比如0.1秒后不是2.0

有没有办法解决NSTimer,不干扰已经解雇过的?

解决方案(?):我正在考虑阻止互动,因此会出现第二张图片,但这似乎是一种糟糕的解决方法。

2 个答案:

答案 0 :(得分:2)

您应该保留对此计时器的引用(作为属性或作为iVar)。

如果您想取消它,只需致电[myTimer invalidate]; myTimer = nil;

编辑:

如果您没有保留对计时器的引用(如果您是在代码块内从头开始创建它),则始终存在创建多个实例的危险......

答案 1 :(得分:1)

写setter方法,像这样。每当你需要取消计时器

self.myTimer = nil;

- (void)setMyTimer:(NSTimer *)inTimer
{
   if (inTimer != mMyTimer)
  {
    [mMyTimer invalidate];
    [mMyTimer release];
    mMyTimer = [inTimer retain];
  }
}  

希望这对你有用。