这可能不是您所看到问题的直接原因,但我已经可以发现一个重大错误。
每次都设置此计时器的事实viewWillAppear
意味着每当您的视图出现时,您正在创建一个新计时器(并泄漏旧计时器),该计时器将在创建后 60 秒触发。
如果您的视图多次消失并重新出现,您将有多个计时器以完全随机的间隔触发相同的方法。
您需要正确管理计时器。如果您希望它在第一次创建视图时启动,并且即使在未显示视图时也保持滴答声/触发,那么您需要在init
或期间创建它viewDidLoad
,然后确保在您dealloc
或时停止它viewDidUnload
。
如果您希望计时器仅在视图是当前视图时滴答/触发,那么您需要确保在 和 上正确管理停止和启动viewDidAppear
计时器viewWillDisappear
。
此外,正如 Williham Totland 在他的回答中所说,不应依赖 NSTimer 来确定确切的时间。这也在文档中说明:
定时器不是实时机制;它仅在已添加计时器的运行循环模式之一正在运行并且能够检查计时器的触发时间是否已过时触发。由于典型的运行循环管理的各种输入源,计时器的时间间隔的有效分辨率被限制在 50-100 毫秒的数量级。如果在运行循环处于未监视计时器的模式或长时间调用期间发生计时器的触发时间,则计时器不会触发,直到运行循环下一次检查计时器。因此,定时器触发的实际时间可能是计划触发时间之后的一个重要时间段。
在这种情况下,时间跨度为 60 秒,计时器不准确应该不是问题,我认为您看到的问题是因为计时器没有得到正确管理。