我想创建一个NSTimer,重复两次然后停止并使自身无效。如果可能的话,我宁愿不使用循环。有关如何做到这一点的任何想法?
答案 0 :(得分:2)
在计时器委托函数中创建一个初始化为0的静态int
每次调用代表时增加它。
当计数器达到您希望使计时器无效的值时。
答案 1 :(得分:1)
这是你的计时器目标应该处理的东西,而不是计时器本身应该处理的东西。您可以安装一个重复计时器,让目标在第二次触发时使其无效,或者您可以安装一次性计时器,在第一次触发后重新安装它,然后不再次设置它。 / p>
答案 2 :(得分:0)
基本上,您需要一个状态机状态变量,可以从初始化定时器的例程和定时器的目标访问。
设置状态变量以允许第一次调用timer任务来重新启动计时器,但是在该调用中还设置了该状态变量,以便后续调用不会重新启动。
请注意,这种状态变量可以通过简单地递减来用于任意数量的计时器任务重复。
状态机几乎就是所有(同步)数字芯片和逻辑的工作方式。
答案 3 :(得分:0)
我非常不同意杰里米,这是目标应该处理的事情。事实上,我不同意我已经创建了自己的基于NSTimer的Timer类,您可以对其进行详细配置。
- (void) doSomething: (Timer*) timer
{
NSLog(@"This is iteration %d", timer.currentIteration);
}
- (void) startDoingSomething
{
Timer* timer = [Timer new];
timer.interval = 5.0; // Fire every 5 seconds
timer.delay = 2.5; // Start firing after 2.5 seconds
timer.iterations = 3; // Only fire three times
timer.target = self;
timer.selector = @selector(doSomething:);
[timer schedule];
// Don't forget to release timer somewhere - the above is just an example
}
答案 4 :(得分:-1)
一种解决方案可能与此类似。
启动计时器
[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerMethod:) userInfo:nil repeats:YES];
处理计时器和重复
int repetitions = 2; //EDIT: remove static declaration (see below)
- (void)timerMethod:(NSTimer*)theTimer{
NSLog(@"Timer fired");
repetitions--;
if(repetitions == 0){
[theTimer invalidate];
NSLog(@"Timer stopped");
}
}
编辑: 我删除了上面的静态修改器,以创建一个更通用的示例。静态的最初意图是将计时器保持在相似类型的对象上,这是OP没有做出的请求。