NSTimer自动保留吗?

时间:2009-02-28 21:04:17

标签: objective-c iphone cocoa-touch

我有一个 - (void)保存方法,当用户单击导航栏按钮时调用该方法。在该方法中是以下NSTimer:

[NSTimer scheduledTimerWithTimeInterval:.25f target:self selector:@selector(flashBackgroundRed) userInfo: nil repeats: flashRepeat];

自flashBackgroundRed保持计数后,计时器重复4次,并在4次点击后将flashRepeat设置为NO。一旦用户点击保存,一切运行良好。但是如果用户不断地使用不正确的数据进行保存,我会将它们保留在当前视图中。出于某种原因,闪光灯的增加速度更快。好像每一个都是前一个间隔的25%。我不保留这个计时器。它只存在于save方法中。

如果用户单击取消按钮,则会弹出viewB(带有NSTimer的视图)并显示viewA。从viewA回到viewB似乎重置了计时器invterval。但是,越来越快的闪光周期再次开始。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

只要计划了NSTimer,它就会被运行循环保留。

听起来问题是你在稍微不同的时间不断创建等效的重复计时器,因此它们在视觉上一起成为一个效果与你想要的频率不同的效果。尝试存储对计时器的引用,并在创建新计时器时使其无效。

答案 1 :(得分:1)

听起来你正在安排比你想要的更多的计时器。

一旦安排,计时器将被保留,直至无效。重复计时器必须手动失效。

重复参数指定计时器是否会重复。您不能指定计时器应重复的次数,只能指定它是否会重复。

此外,选择器的方法签名是错误的。它应该看起来像

-(void)timerFireMethod:(NSTimer*)theTimer

在您的计时器回调中,您可以确定您是否希望计时器继续重复;如果没有,请调用[timer invalidate]。