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