В зависимости от проекта, экономия времени разработчика может быть гораздо более ценной, чем экономия системной памяти.

ичок, и я вроде понимаю Lazy Var vs. Let. Я заметил, что это экономит массу памяти при использовании Lazy Var, особенно с ImageViews. Но учебники и руководства, которые я видел до сих пор, не используют Lazy Var очень часто, поэтому я чувствую подозрение, что это плохая практика и что я что-то упускаю.

Я провел небольшое исследование и узнал, что Lazy не «безопасен для потоков», но я не понимаю, что это значит. Я видел много плюсов и минусов, но не могу сделать никаких выводов, особенно потому, что у меня очень ограниченные знания.

Когда можно (или лучше) использовать Lazy Var против Let при создании UIView?

lazy var profileImageView: UIImageView = {

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

}()
 dfd18 нояб. 2017 г., 16:45
Вот более старое (похоже, Swift 1) объяснение того, чтоlazy var является. В частности, посмотрите на раздел о том, когда его использовать:mikebuss.com/2014/06/22/lazy-initialization-swift Теперь, просматривая три ссылки в правом столбце вашего вопроса,предлагать они похожи на ваши, я считаю, что ни одиндействительно ответьте на вопрос - как вышеупомянутая ссылка - на * когда использовать каждый из них. Они либо объясняют, чтоlazy есть (и почему вы должны использоватьvar или почему что-то не строит. Я голосую за это, надеясь, что кто-то здесь может дать вам хороший ответ на хороший вопрос

Ответы на вопрос(1)

Решение Вопроса

lazy var или нет, зависит от вашего кода и его контекста. Это не плохо или хорошо само по себе. Вы должны решить, когда это уместно.

Прежде чем вы сможете решить это, вы должны знать, чтоlazy var является.

Что такоеlazy var?

Ленивая инициализация - это концепция, в которой инициализация (создание) содержимого переменной откладывается до его первого использования. Первый доступ к такой переменной запускает инициализацию. Поскольку содержимое не создается до тех пор, пока переменная не будет использована (необходима), использование отложенных инициализированных переменных может сэкономить ресурсы.

Это основная причина ленивой инициализации. Вы не создаете что-то, пока вам это не нужно. Это также логика, которую вы будете использовать при принятии решения, следует лиlazy var или нет.

Если вы имеете дело с представлениями (или чем-то еще), которые всегда видимы (необходимы), нет смысла использовать ленивую инициализацию. С другой стороны, когда вы имеете дело с экземплярами, которые не всегда нужны - тогда используйтеlazy var оправдано.

Если ваше представление всегда видно в представленном контроллере представления, вы не добьетесь многого, сделав его ленивым. Если он виден только при определенных обстоятельствах - например, когда пользователь разворачивает свернутую панель - тогда имеет смысл сделать ее ленивой. Это заставит ваш контроллер представления загружаться быстрее и использовать меньше памяти по умолчанию.

Что касается безопасности потоков,lazy var не безопасны для потоков в Swift.

Это означает, что если два разных потока пытаются получить доступ к одному и тому жеlazy var в то же время, прежде чем такая переменная будет инициализирована, возможно, что один из потоков получит доступ к частично созданному экземпляру.

Вы можете найти больше информации о безопасности потоков в:

Swift - ленивый вар потокобезопасен?

Сделать "ленивый вар" безопасным

Ваш ответ на вопрос