我想每 500 毫秒执行一段代码,总共 10 秒。我的代码使用此代码每半秒执行一次
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];
但我似乎无法弄清楚如何在 10 秒后停止它的执行。“重复”参数似乎不允许指定时间。有人可以指出我应该去哪里吗?
谢谢布赖恩
我想每 500 毫秒执行一段代码,总共 10 秒。我的代码使用此代码每半秒执行一次
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];
但我似乎无法弄清楚如何在 10 秒后停止它的执行。“重复”参数似乎不允许指定时间。有人可以指出我应该去哪里吗?
谢谢布赖恩
您需要invalidate
在 scheduleTimerWithTimeInterval:target:selector:userInfo:repeats: 给您的 NSTimer 上发送消息。例如,在您的类的属性或 iVar 中分配该方法返回给您的 NSTimer,并在 10 秒后调用invalidate
它。
例子:
。H:
@interface myClass{
NSTimer *myT;
}
[...]
米:
[...]
{
myT = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];
[NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(stop) userInfo:nil repeats:NO];
}
-(void)stop{
[myT invalidate];
}
[...]
NSTimer
如果您愿意,您可以通过实施某种标志来避免另一个,finish
并跟踪您向该getLevel
方法发送消息的次数,因为它是每 0.5 秒一次,这将是 20 次。
但我宁愿 2 个NSTimer
对象,因为你知道它是 10 秒,而不管其他计时器如何,你可能决定改变它的频率,提高或降低它的频率......
最好的办法是在你的类上创建一个属性。
@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, strong) int ticks;
然后在你的 getLevel 选择器中调用这个:
if (ticks >= 20) [self.timer invalidate];
// 20 is 10 seconds * 500 milliseconds
ticks++;
您可以采用的另一种方法是定义一个选择器,例如-(void)stopTimer{}
使计时器无效。然后,当您首先创建计时器时,请执行以下操作之一:
[self performSelector:@selector(stopTimer) withObject:nil afterDelay:10.0];
您可以使用 invalidate 设置另一个计时器来停止它。只需在 ivar 或属性中保留此计时器的引用即可。
检查此答案以获取更多信息。