Sobes.tech
Junior

Ce este lazy?

sobes.tech AI

Răspuns de la AI

Cuvântul cheie lazy este utilizat pentru inițializarea întârziată a unei proprietăți.

O proprietate cu lazy este inițializată doar la prima accesare. Acest lucru este util pentru:

  • Performanță: dacă crearea obiectului necesită multe resurse, dar nu întotdeauna.
  • Evitarea dependențelor ciclice în timpul inițializării.
  • Lucrul cu resurse externe sau date care pot să nu fie disponibile la crearea obiectului.

Proprietățile lazy trebuie să fie:

  • Variabile (var), deoarece valoarea lor poate fi schimbată la prima accesare.
  • Fără observatori de proprietate (willSet, didSet) până la prima accesare.
class HeavyResource {
    init() {
        print("Resursă grea inițializată")
        // Simulare de inițializare costisitoare
        Thread.sleep(forTimeInterval: 1)
    }
}

class MyPresenter {
    let name = "Presenter"

    // proprietate lazy, inițializată la prima utilizare
    lazy var heavyResource: HeavyResource = {
        print("Creare resursă grea")
        return HeavyResource()
    }()

    init() {
        print("\(name) inițializat")
    }

    func accessResource() {
        print("Accesare resursă grea...")
        _ = heavyResource // Aici are loc inițializarea proprietății lazy
        print("Resursă accesată")
    }
}

// Inițializăm prezentatorul
let presenter = MyPresenter() // Ieșire: Presenter inițializat

// Accesul la resursă are loc mai târziu, când este cu adevărat necesar
presenter.accessResource()
/*
Ieșire:
Accesare resursă grea...
Creare resursă grea
Resursă grea inițializată
Resursă accesată
*/

// Accesul repetat nu provoacă reinițializare
presenter.accessResource()
/*
Ieșire:
Accesare resursă grea...
Resursă accesată
*/