Sobes.tech
Junior

Lazy эмне?

sobes.tech AI

AIден жооп

lazy ачкыч слова объекттин кечиктирилген башталуусу үчүн колдонулат.

lazy менен белгиленген объект биринчи кирүүдө гана башталат. Бул пайдалуу:

  • Өндүрүмдүүлүк үчүн: эгер объектти түзүү көп ресурсту талап кылса, бирок ар дайым керек болбосо.
  • Башталууда циклик көзкарандылуулукту болтурбоо.
  • Четке ресурстар менен иштөө же маалыматтар, алар объект түзүлгөндө жеткиликтүү болбошу мүмкүн.

lazy объекттер төмөнкүлөр болушу керек:

  • Өзгөрмөлөр (var), анткени алардын баасы биринчи кирүүдө өзгөрүшү мүмкүн.
  • Биринчи кирүүгө чейин көзөмөлчүлөр (willSet, didSet) болбошу керек.
class HeavyResource {
    init() {
        print("Кыйын ресурсту баштоо")
        // Кымбат баштоо процесси симуляцияланат
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Презентер"

    // `lazy` өзгөчөлүк, биринчи колдонууда башталат
    lazy var heavyResource: HeavyResource = {
        print("Кыйын ресурсту түзүү")
        return HeavyResource()
    }()

    init() {
        print("\(name) башталды")
    }

    func accessResource() {
        print("Кыйын ресурска кирүү...")
        _ = heavyResource // Бул жерде `lazy` өзгөчөлүктүн башталуусу болот
        print("Ресурс жеткиликтүү")
    }
}

// Презентерди баштоо
let presenter = MyPresenter() // Чыгуу: Презентер башталды

// Ресурска кирүү кийинчерээк, чын эле керек болгондо
presenter.accessResource()
/*
Чыгуу:
Кыйын ресурска кирүү...
Кыйын ресурсту түзүү
Кыйын ресурсту баштоо
Ресурс жеткиликтүү
*/

// Кайталаган кирүү кайра баштоо болтурбайт
presenter.accessResource()
/*
Чыгуу:
Кыйын ресурска кирүү...
Ресурс жеткиликтүү
*/