Ios 如何查看NSTimer是否堆积以及如何防止堆积?
我正在制作一款iphone游戏,使用NStimer进行移动。我发现有一个错误,使计时器堆叠了一些时间,但我还没有找到原因是什么。是否有任何方法可以查看分配了多少计时器,是否有任何方法可以通过执行以下操作来防止:Ios 如何查看NSTimer是否堆积以及如何防止堆积?,ios,objective-c,timer,Ios,Objective C,Timer,我正在制作一款iphone游戏,使用NStimer进行移动。我发现有一个错误,使计时器堆叠了一些时间,但我还没有找到原因是什么。是否有任何方法可以查看分配了多少计时器,是否有任何方法可以通过执行以下操作来防止: If(myTimer.numberOfAllocatedTimers == 0) { myTimer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateme) userI
If(myTimer.numberOfAllocatedTimers == 0) {
myTimer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateme) userInfo:nil repeats:YES];
}
多了解一下这段代码的使用位置会很有帮助 不过,我会尽力解释为什么会发生这种情况 每次使用[NSTimer scheduledTimerWithTimeInterval…]时,都会创建一个新的计时器,并开始重复。如果您的代码在回调方法中创建了计时器,请参见下面的示例,您将堆栈计时器
- (void)updateme {
if ([NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateme) userInfo:nil repeats:YES]) {
// This creates stacked timers!
}
}
以下是您应该如何做到这一点:
@property (nonatomic, strong) NSTimer *myTimer;
...
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(updateme:) userInfo:nil repeats:YES];
...
- (void)updateme:(NSTimer *)timer {
if (timer == self.myTimer) {
// Do something because the timers are equal
}
}
试试这个:
// use this to start timer
myTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doSthing) userInfo:nil repeats:YES];
// use this to stop timer
if (myTimer) {
[myTimer invalidate];
myTimer = nil;
}
您需要使用
=
,而不是=
来查看计时器的数量是否为零。myTimer.NumberOfAllocatedTimer只是我写的东西,以向您展示我的意思。可能的重复