1

我想每 500 毫秒执行一段代码,总共 10 秒。我的代码使用此代码每半秒执行一次

[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getLevel:) userInfo:nil repeats: YES];

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

谢谢布赖恩

4

4 回答 4

5

您需要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 秒,而不管其他计时器如何,你可能决定改变它的频率,提高或降低它的频率......

于 2012-07-13T14:48:26.180 回答
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++;
于 2012-07-13T14:49:13.677 回答
1

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

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

于 2012-07-13T15:17:56.507 回答
0

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

检查此答案以获取更多信息。

于 2012-07-13T14:51:24.483 回答