Junior
Ի՞նչ է lazy-ը։
sobes.tech AI
Պատասխան AI-ից
Բառային բանալի lazy օգտագործվում է հատկության ուշացման սկզբնավորելու համար:
lazy հատկությունը սկզբնավորվում է միայն առաջին մուտքի ժամանակ: Սա օգտակար է, երբ:
- Աշխատանքային արդյունավետություն՝ եթե օբյեկտի ստեղծումը պահանջում է շատ ռեսուրսներ, բայց ոչ միշտ:
- Ցիկլային կախվածությունների կանխում՝ սկզբնավորման ժամանակ:
- Աշխատանք արտաքին ռեսուրսների կամ տվյալների հետ, որոնք կարող են չլինել հասանելի օբյեկտի ստեղծման ժամանակ:
lazy հատկությունները պետք է լինեն՝
- Փոփոխականներ (
var), քանի որ նրանց արժեքը կարող է փոխվել առաջին մուտքի ժամանակ: - Չպետք է ունենան դիտորդներ (
willSet,didSet) մինչև առաջին մուտքը:
class HeavyResource {
init() {
print("Բարդ ռեսուրսը սկզբնավորվեց")
// Նմանեցում ծախսատար սկզբնավորելու համար
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Prezentator"
// `lazy` հատկություն, սկզբնավորվում է առաջին օգտագործման ժամանակ
lazy var heavyResource: HeavyResource = {
print("Բարդ ռեսուրսի ստեղծում")
return HeavyResource()
}()
init() {
print("\(name) սկզբնավորվեց")
}
func accessResource() {
print("Մուտք բարդ ռեսուրս...")
_ = heavyResource // Այստեղ տեղի է ունենում `lazy` հատկության սկզբնավորումը
print("Ռեսուրսը հասանելի է")
}
}
// Նախագծողի սկզբնավորում
let presenter = MyPresenter() // Արտածում՝ Prezentator սկզբնավորվեց
// Ռեսուրսին մուտք գործելը ավելի ուշ, երբ այն իսկապես անհրաժեշտ է
presenter.accessResource()
/*
Արտածում՝
Մուտք բարդ ռեսուրս...
Բարդ ռեսուրսի ստեղծում
Բարդ ռեսուրսը սկզբնավորվեց
Ռեսուրսը հասանելի է
*/
// Կրկնակի մուտքը չի առաջացնում նոր սկզբնավորում
presenter.accessResource()
/*
Արտածում՝
Մուտք բարդ ռեսուրս...
Ռեսուրսը հասանելի է
*/