Xcode 7:有没有办法让所有的定时器都失效?

Xcode 7: Is there a method to invalidate all timers?

我正在制作一款游戏,您可以玩第 2 阶段并跳回第 1 阶段。但游戏运行时有计时器。有没有一种方法可以使所有 NSTimer 失效?

赞(刚编的):

[NSTimer invalidateAllTimers];

没有使所有计时器失效的方法。您需要将计时器引用存储在一个数组中,然后您可以进行快速枚举并使它们全部无效。

例如:

for (id timerObject in timerObjectsArray) {
    if ([timerObject isValid]) {
        [timerObject invalidate];
    }
}

没有这样的方法。如果有的话,它可能会破坏很多东西,因为您的代码不是唯一可以使用计时器的代码。框架也可以。

但是,您可以保留游戏正在使用的所有计时器的 NSMutableArray 并使数组中的所有计时器无效,如下所示:

//whenever you create a timer:
[timers addObject:timer];    //timers is the NSMutableArray of all your timers
//when you invalidate a timer:
[timers removeObject:timer];
//to remove all timers:
[timers makeObjectsPerformSelector:@selector(invalidate)]
[timers removeAllObjects];

注意:我没有测试过这段代码,如果在数组中放置重复的计时器可能会导致问题。