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ă
*/