Sobes.tech
Junior

Mi az a lazy?

sobes.tech MI

Válasz az MI-től

A lazy kulcsszó késleltetett tulajdonság inicializálására szolgál.

A lazy tulajdonság csak az első hozzáféréskor inicializálódik. Ez hasznos:

  • Teljesítmény szempontjából: ha az objektum létrehozása sok erőforrást igényel, de nem mindig szükséges.
  • Ciklikus függőségek elkerülése az inicializálás során.
  • Külső erőforrások vagy adatok kezelésére, amelyek nem elérhetők az objektum létrehozásakor.

A lazy tulajdonságoknak:

  • Változóknak (var) kell lenniük, mivel értékük az első hozzáféréskor változhat.
  • Nem szabad megfigyelőket (willSet, didSet) tartalmazniuk az első hozzáférésig.
class HeavyResource {
    init() {
        print("Nehéz erőforrás inicializálva")
        // Erőforrás-igényes inicializáció szimulálása
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Presenter"

    // lazy tulajdonság, az első használatkor inicializálódik
    lazy var heavyResource: HeavyResource = {
        print("Nehéz erőforrás létrehozása")
        return HeavyResource()
    }()

    init() {
        print("\(name) inicializálva")
    }

    func accessResource() {
        print("Hozzáférés a nehéz erőforráshoz...")
        _ = heavyResource // Itt történik a lazy tulajdonság inicializálása
        print("Erőforrás elérve")
    }
}

// A prezentert inicializáljuk
let presenter = MyPresenter() // Kimenet: Presenter inicializálva

// A hozzáférés később történik, amikor valóban szükség van rá
presenter.accessResource()
/*
Kimenet:
Hozzáférés a nehéz erőforráshoz...
Nehéz erőforrás létrehozása
Nehéz erőforrás inicializálva
Erőforrás elérve
*/

// Az ismételt hozzáférés nem váltja ki az újra inicializálást
presenter.accessResource()
/*
Kimenet:
Hozzáférés a nehéz erőforráshoz...
Erőforrás elérve
*/