swift - 在 swift 中使用计时器的替代方案

标签 swift xcode optimization timer performance-testing

只是一个一般性问题。我的项目使用十个不同的快速计时器,以便根据用户选择的设置更改 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/

相关文章:

ios - 使用swift 3将来自字段的输​​入存储为变量

ios - 从分割 View Controller 的详细 View 中调用主视图 Controller

ios - 如何以编程方式更改 UIView 的 "origin"(如 Xcode 中的标记)?

r - 在 R 中为组的每个成员分配值的快速方法

c - 在 C 中使用标准库或编写自己的函数更快吗?

swift - NSOperationQueue 在计算任务上的性能比单线程差

swift - 删除 URL 不起作用 swift 3

iphone - 通过代码从 consol 中清除 NSlog 生成的日志

c++ - 如何为 C++ 类和结构自定义 STAsertEquals 输出?

c# - 使用 Linq 搜索