iOS - 执行一段代码10秒钟

时间:2012-07-13 14:44:05

标签: objective-c ios nstimer

我想每500毫秒执行一段代码,总共10秒钟。我用这段代码

让代码每隔半秒执行一次
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];

但我似乎无法弄清楚如何在10秒后停止执行。 “重复”参数似乎不允许指定的时间。 有人能指出我应该去哪里的方向吗?

由于 布赖恩

4 个答案:

答案 0 :(得分:5)

你需要在NSTimer上发送消息invalidate scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:给你。例如,在您的类的属性或iVar中指定方法返回给您的NSTimer,并在10秒后调用它上的invalidate

示例:

·H:

@interface myClass{
NSTimer *myT;
}
[...]

的.m:

[...]
{
    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秒而不管另一个计时器,你可能决定改变它,频率上升或下降......

答案 1 :(得分:1)

最好的办法是在课堂上制作一个属性。

@property (nonatomic, strong) NSTimer *timer;
@property (nonatomic, strong) int ticks;

然后在你的getLevel选择器中调用:

if (ticks >= 20) [self.timer invalidate];
// 20 is 10 seconds * 500 milliseconds
ticks++;

答案 2 :(得分:1)

另一种方法是定义一个选择器,比如-(void)stopTimer{} 其中您使计时器无效。然后,当您首先创建Timer时,请执行以下操作之一:

[self performSelector:@selector(stopTimer) withObject:nil afterDelay:10.0];

答案 3 :(得分:0)

您可以使用invalidate设置另一个计时器来停止它。只需在ivar或属性中保留此计时器的参考。

查看此answer以获取更多信息。