只是一个一般性问题。我的项目使用十个不同的快速计时器,以便根据用户选择的设置更改 UI。设置保存到按键中,计时器用于每秒读取一次。这可行,问题是它导致我的应用程序使用 34% 的 cpu、高能耗和 20% 的开销。我想知道是否有其他方法来检查用户是否对应用程序的设置进行了任何更改并更新各种 View Controller 。
最佳答案
定期调用函数只是为了检查某些变量是否发生变化是非常糟糕的做法。
您有多种方法来实现自动 UI 更新。下面描述了其中一种方法。
Swift
有属性观察器,当某个属性/变量发生变化时,系统会自动调用它们。您所需要做的就是为用于将数据提供给 UI 的每个属性设置属性观察器,并从属性观察器内部更新 UI。
假设您有变量 a
,用于存储要显示的 labelA
数据。下面是一个经过测试且有效的 Playground 示例。
class MyViewController: UIViewController {
var label:UILabel = UILabel(frame: CGRect(x: 20, y: 20, width: 100, height: 30))
override func viewDidLoad() {
super.viewDidLoad()
label.text = a
label.textColor = .black
self.view.addSubview(label)
view.backgroundColor = .white
}
var a = "first" {
didSet {
label.text = a
}
}
}
let myVC = MyViewController()
PlaygroundPage.current.liveView = myVC
sleep(10)
myVC.a = "new value"
您可以看到,如果更改变量 a
的值,标签上的文本会自动更改。
关于swift - 在 swift 中使用计时器的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445621/