我想创建一个重复两次然后停止并使其自身失效的NSTimer。如果可能的话,我宁愿不使用循环。有关我如何做到这一点的任何想法?如何创建重复两次然后停止的NSTimer
回答
在您的定时器代理函数中创建一个静态int,该函数初始化为0.
每次调用委托时都增加它。
当计数器达到您希望使计时器无效的值时。
这是你的计时器的目标应该处理的事情,而不是计时器本身应该处理的事情。您可以安装一个重复定时器,并在第二次触发时让目标失效,或者您可以安装一次性定时器,在第一次触发后重新安装,然后在第二次再次设置。
一种解决方案可能与此类似。
启动定时器
[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没有做出的请求。
因为全局变量是灾难的秘诀,因此被低估。 – 2010-10-29 18:08:10
尤其是当静态修饰符使它们没有意义时。 – KevinDTimm 2010-10-29 18:10:17
这是为了在一些类定义中的静态。 – 2010-10-29 18:14:04
基本上,您需要一个状态机状态变量,可以从初始化定时器的例程和计时器的目标中访问状态机状态变量。
设置状态变量以允许第一次调用定时器任务来重新启动定时器,但是在该调用中还会设置该状态变量,以便后续调用不会重新启动。
请注意,这种状态变量可以用于任意数量的定时器任务重复,只需简单地递减它即可。
状态机几乎是所有(同步)数字芯片和逻辑的工作原理。
我非常不同意杰里米认为这是目标应该处理的事情。事实上,我非常不同意,我已经创建了我自己的基于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
}
- 1. 如何停止NSTimer
- 2. 文件被创建一次,然后停止
- 3. 如何停止重复Ajax后?
- 4. 是“创建然后释放,然后重新创建然后释放”比“创建然后使用两次然后释放”更好?
- 5. NSTimer不停止
- 6. UIPickerView停止NSTimer
- 7. 重新创建NSTimer?
- 8. 检查重复记录,然后创建
- 9. IOS:停止的NSTimer
- 10. 咕嘟咕嘟与watchify/browserify运行两次,然后停止看
- 11. 如何停止/无效掉的NSTimer
- 12. 停止readline,printf,然后恢复readline
- 13. UIView动画不重复/突然停止
- 14. 不能停止NSTimer
- 15. NSTimer只重复x次,然后在无效时调用选择器
- 16. Applescript/Automator - 在给定的重复次数后停止循环?
- 17. 重复最后一次输入两次
- 18. ListGrid添加记录onload后创建重复,然后再次拖动相同
- 19. 如何等待,直到NSTimer停止
- 20. 如何停止按钮然后在Android
- 21. 停止已安排的nstimer
- 22. 的NSTimer不会停止
- 23. $ 2次重复之后,间隔停止在Angular中工作
- 24. 如何停止jQuery的重复
- 25. 如何停止重复的Onchange事件
- 26. 如何重定向,然后在node.js中停止
- 27. 如何在slidetoggle()上停止setInterval()然后重新启动?
- 28. PHP while():三次后如何停止?
- 29. 如何制作重复特定次数的NSTimer?
- 30. NSTimer不重复
你可以安装两个单次计时器。 – 2010-10-29 17:13:42