objective-c - iOS: 零误差或极小误差的定时执行或延迟执行?
本文介绍了objective-c - iOS: 零误差或极小误差的定时执行或延迟执行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
问题如下:
节奏类游戏需要执行很多的跟音乐节拍相关的操作,并且为了保证节奏感,需要让操作跟节拍的关系十分紧密。对两者间隔要求不能超过0.02秒或更低。
目前使用了 GCD 中的 asyncAfter(deadline:)方法,不过误差总是要大于0.05秒,并且还无法保证误差会不会传递下去。请问有更好的方式来解决误差吗?
var time = Date().timeIntervalSince1970
let dq = DispatchQueue(label: "queue", qos: .userInitiated, attributes: [.concurrent, .initiallyInactive])
dq.async {
self.audioPlayer.play()
time = Date().timeIntervalSince1970
}
dq.asyncAfter(deadline: .now() + 0.43, execute: {
let res = Date().timeIntervalSince1970
print(" 误差: \(res - time)")
})
以下是多次运行控制台打印结果(该数字指的是实际间隔,与期望间隔的0.43相差甚远,且不稳定):
解决方案
http://blog.lessfun.com/blog/...
这篇关于objective-c - iOS: 零误差或极小误差的定时执行或延迟执行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文