Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何查看NSTimer是否堆积以及如何防止堆积?_Ios_Objective C_Timer - Fatal编程技术网

Ios 如何查看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

我正在制作一款iphone游戏,使用NStimer进行移动。我发现有一个错误,使计时器堆叠了一些时间,但我还没有找到原因是什么。是否有任何方法可以查看分配了多少计时器,是否有任何方法可以通过执行以下操作来防止:

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只是我写的东西,以向您展示我的意思。可能的重复