我告诉你,我希望这是一个简单的解决方法。

我所拥有的是类型为NSTimer的IVAR * timer类。当执行IBAction时,将调用包含以下代码的方法:

if (timer) timer = nil;
timer = [NSTimer timerWithTimeInterval:0.2 target:self selector:@selector(removeOverlay) userInfo:nil repeats:NO];


在同一个类中,我有一个方法:

- (void)removeOverlay {
...
}


在0.2秒的时间间隔后不会触发。

您知道这是什么问题吗?

最佳答案

确保同时不释放timer实例的NSTimer实例。
removeOverlay看起来像它更新了一些UI。确保在主线程上调用它。
removeLayout方法中放置一个断点以查看是否触发。
您没有计划计时器。将timerWithTimeInterval替换为scheduledTimerWithTimeInterval


要在主线程上执行代码(允许UI更新):

- (void)removeOverlay {
  dispatch_async(dispatch_get_main_queue(), ^{
     // update ui
  });
}


有关Grand Central Dispatch (GCD)的更多信息

关于iphone - NSTimer无法按预期运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14205809/

10-13 03:50