Swe*_*per -1 nstimer ios swift
在我的应用程序中,我在视图控制器上放置了一个标签,我希望该标签显示一个每毫秒递增1的数字.(我知道我可以每秒更新1000,但我希望它看起来很流畅)
@IBOutlet var label: UILabel!
var number = 0
var timer: NSTimer!
override func viewDidLoad() {
super.viewDidLoad()
timer = NSTimer.scheduledTimerWithTimeInterval(0.001, target: self, selector: Selector("addNumber"), userInfo: nil, repeats: true)
}
func addNumber () {
number++
label.text = number.description
}
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
timer?.invalidate()
}
Run Code Online (Sandbox Code Playgroud)
代码对我来说都很合理,但是当我运行应用程序时,我发现这个数字每秒增加大约50,而不是每秒增加1000.这个错误远远不能接受!
令人惊讶的是,当我锁定屏幕几秒钟并再次解锁时,数字突然增加了几千!
我认为这是因为我在计时器触发时更新UI,因此需要更多时间.但我该如何解决这个问题呢?
你的问题是询问如何NSTimer更准确,我有一些坏消息:你做不到.一个合理的期望NSTimer是它可以被称为每秒30次,如果你幸运的话,每秒最多可以被召唤~60次.那没关系.
从实际角度考虑这一点:显示器每秒最多只能更新60次,因此不需要经常提供用户反馈.
如果你试图最大限度地利用硬件并尽可能快地依赖它,那么你将在旧的和较慢的硬件上遇到问题,它可能每秒只能发射~20次.依靠时间间隔NSTimer会让你很快陷入困境.
由于您正在寻找毫秒,您可以设置一个开始时间,每次调用您的函数时,请查看自开始时间以来的毫秒数,这是发送的毫秒数.
您当前的方法执行Apple的文档所说的所有内容:number只是调用方法的次数(而不是发送的毫秒数).
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |