swift - 毫秒计时器?

标签 swift timer

有人知道如何制作一个时间间隔为0.001的计时器吗?我在某处读到 Timer 的时间间隔不能低于 0.02,而我的计时器就是这样。

我的计时器:

timer = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(self.updateTimer), userInfo: nil, repeats: true)

@objc func updateTimer() {
   miliseconds += 0.001
}

最佳答案

是的,时间间隔可以小于 0.02 秒。例如。 0.01秒的间隔很容易实现。但在 0.001 或 0.0001 秒时,您开始受到实际考虑的限制,即您在该时间段内可以完成多少工作。

但是,如果您的目标是在 UI 中表示某些内容,则几乎没有必要超过设备的每秒最大帧数(通常为 60 fps)。如果屏幕只能每 60 秒更新一次,那么计算得更频繁还有什么意义呢?这只是浪费了 CPU 周期。顺便说一句,如果我们试图实现最佳屏幕刷新率,我们会使用 CADisplayLink ,不是Timer 。它的工作原理就像计时器一样,但会以最佳速率刷新屏幕。

无论如何,更新的想法milliseconds捕捉流逝的时间有点不可能。我们从来不会像这样更新“耗时计数器”,因为即使在最好的情况下,也无法保证频率。 (并且由于小数十进制值的二进制表示形式的限制,我们也很少希望像这样将浮点值相加。)

相反,如果我们想在 UI 中实现最快的更新,我们会保存开始时间,启动 CADisplayLink ,并且每次调用计时器处理程序时,计算耗时作为当前时间和开始时间之间的差。

现在,如果您确实需要一个非常精确的计时器,这是可以完成的,但您应该看到 Technical Note TN2169 ,展示了如何创建高精度计时器。但这更多的是一种边缘情况。

关于swift - 毫秒计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61232102/

相关文章:

ios - 纹理画笔(绘图应用程序)使用 Metal

cocoa - 使 Swift 类符合需要 init 的协议(protocol)

ios - 圆形/圆形 UIView Swift - 不是没有角半径的正方形

ios - 如何从框架 Assets 在 Storyboard 中设置图像

Java定时器每t秒调用函数n次

javascript - 为计时器添加开始、停止、重置按钮

iphone - 如何在调用 iOS sleep 定时器时停止音频

ios - UIImagePickerController 从照片库中挑选质量较差的图像

apache-flex - Flex 4.6 时间选择器组件?

asp.net - 如何防止asp :Timer from sending tick before response is generated?