0

我有一个 void 函数,它只是NSLog(@"Call me");在它的身体里。

我每隔十​​秒钟就会在我的视图中调用它

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(yourMethod) userInfo:nil repeats:YES];

但我希望它在 5 次迭代后停止它。然而它会走向无穷大。我怎样才能做到这一点?

4

4 回答 4

2

您应该使用一个计数器,每次调用您的方法时将其递增,计数为 5,然后使用下面的代码使您的计时器无效。

[timer invalidate];
于 2012-08-23T12:11:15.323 回答
2

1) 保留一个全局变量,从 0 递增到 5。

  int i = 0;

2)在你的定时器函数中增加这个变量..

-(void) yourFunction:(NSTimer*)timer{
  //do your action

  i++;
  if(i == 5){
     [timer invalidate];
  }
}

3) 创建定时器时

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10 
                 target:self 
                 selector:@selector(yourMethod:) // <== see the ':', indicates your function takes an argument 
                 userInfo:nil 
                 repeats:YES];
于 2012-08-23T12:11:24.980 回答
1

要从当前循环中销毁计时器,您应该调用[timer invalidate];

要确定五次出现,您需要维护一个变量并每次增加其计数。如果等于 5,则调用 invalidate 方法。

于 2012-08-23T12:11:42.967 回答
1

首先你需要声明一个int并声明你的NSTimer *timer,所以我们可以阻止它:

@interface AppDelegate : UIViewController {
    int myInt;
    NSTimer *timer;
}

要开始,NSTimer您只需要更改一些代码:

timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(yourMethod) userInfo:nil repeats:YES];

在您的 void 函数中,您可以进行验证以检查代码是否在 5 次迭代后运行:

- (void)myVoid{
    NSLog(@"Call Me");

    if (myInt == 5) {
        [timer invalidate];
        timer = nil;
    }

    myInt++;
}
于 2012-08-23T12:11:50.237 回答