gpt4 book ai didi

Swift - 以编程方式创建 View 时的 Lazy Var 与 Let(节省内存)

转载 作者:IT王子 更新时间:2023-10-29 05:42:25 24 4
gpt4 key购买 nike

我是初学者,我有点了解 Lazy Var 与 Let。我注意到在使用 Lazy Var 尤其是 ImageViews 时,它可以节省大量内存使用。但是到目前为止我看到的教程和指南并不经常使用 Lazy Var,所以我怀疑这是不好的做法并且我忽略了一些东西。

我做了一些研究,了解到 Lazy 不是“线程安全的”,但我不明白这意味着什么。我看到了很多利弊,但我不能得出任何结论,尤其是因为我的知识非常有限。

在创建 UIView 时,何时可以(或更好)使用 Lazy Var 与 Let?

lazy var profileImageView: UIImageView = {

let imageView = UIImageView(image: #imageLiteral(resourceName: "page1"))
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.contentMode = .scaleAspectFit
return imageView

}()

最佳答案

是否使用 lazy var 取决于您的代码及其上下文。它本身并不坏或好。你必须决定什么时候合适。

在你做出决定之前,你必须知道什么是 lazy var

什么是lazy var

延迟初始化是一个概念,其中变量内容的初始化(构造)被延迟到第一次使用时。首次访问此类变量会触发初始化。由于在使用(需要)变量之前不会创建内容,因此使用惰性初始化变量可以节省资源。

这是惰性初始化背后的主要驱动力。除非你需要它,否则你不会创造它。这也是您在决定某些东西是否应该是 lazy var 时将使用的逻辑。

如果您正在处理始终可见(需要)的 View (或其他任何东西),那么使用惰性初始化毫无意义。另一方面,当您处理并非总是需要的实例时 - 然后使用 lazy var 是合理的。

如果您的 View 在呈现的 View Controller 中始终可见,那么通过使其惰性化您将无济于事。如果它只在特定情况下可见——例如当用户展开一些折叠的面板时——那么让它变得懒惰是有道理的。默认情况下,它将使您的 View Controller 加载更快并使用更少的内存。


就线程安全而言,lazy var 在 Swift 中不是线程安全的。

这意味着如果两个不同的线程试图同时访问同一个lazy var,那么在初始化此类变量之前,其中一个线程可能会访问部分构造的实例。

您可以在以下位置找到有关线程安全的更多信息:

Swift - is lazy var thread-safe?

Make "lazy var" threadsafe

关于Swift - 以编程方式创建 View 时的 Lazy Var 与 Let(节省内存),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47367454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com