52

我需要在我的应用程序启动时调用一个方法,然后每 5 秒调用一次相同的方法。

我的代码很简单:

// Call the method right away
[self updatestuff:nil]

// Set up a timer  so the method is called every 5 seconds
timer = [NSTimer scheduledTimerWithTimeInterval: 5
                                          target: self
                                        selector: @selector(updatestuff:)      
                                        userInfo: nil
                                         repeats: YES];

计时器是否有一个选项,所以它会立即触发,然后每 5 秒触发一次?

4

5 回答 5

86

NSTimer's -fire[timer fire];就是你要找的东西。

这将触发/立即调用计时器以消除时间延迟。

于 2012-05-26T07:13:16.180 回答
21

您不能在同一行代码中安排计时器并立即触发事件。所以你必须用两行代码来完成。

首先,安排计时器,然后立即在计时器上调用“fire”:

timer = [NSTimer scheduledTimerWithTimeInterval: 5
                                      target: self
                                    selector: @selector(updatestuff:)      
                                    userInfo: nil
                                     repeats: YES];
[timer fire];

当调用 fire 时,您的计时器等待触发的时间间隔将重置,因为它刚刚运行,然后将在指定的时间间隔内继续运行 - 在这种情况下,每 5 秒一次。

于 2014-07-03T13:25:53.070 回答
12

在斯威夫特:

timer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: #selector(foo), userInfo: nil, repeats: true)
timer.fire()
于 2018-06-26T16:02:44.617 回答
3

您可以初始化计时器并在同一行中触发它:

[(checkStatusTimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(checkStatusTimerTick:) userInfo:nil repeats:YES]) fire];
于 2015-09-10T09:29:52.360 回答
1

很快,这可以通过一行来实现,例如:

Timer.scheduledTimer(withTimeInterval: intervalInSec, repeats: true) { 

}

于 2020-08-12T17:44:13.683 回答