Junior
Lazy nima?
sobes.tech AI
AIdan javob
Kalit so'z lazy xususiyatning kechiktirilgan boshlanishi uchun ishlatiladi.
lazy bilan belgilangan xususiyat faqat birinchi marta unga kirishda boshlanadi. Bu quyular uchun foydalidir:
- Ishlash tezligi: ob'ektni yaratish ko'p resurslarni talab qilsa, lekin har doim kerak bo'lmasa.
- Boshlash paytida tsiklik bog'liqliklarni oldini olish.
- Tashqi resurslar yoki ma'lumotlar bilan ishlash, ular ob'ekt yaratilganda mavjud bo'lmasligi mumkin.
lazy xususiyatlar quyidagilar bo'lishi kerak:
- O'zgaruvchilar (
var), chunki ularning qiymati birinchi kirishda o'zgarishi mumkin. - Birinchi kirishgacha xususiyat kuzatuvchilar (
willSet,didSet) bo'lmasligi kerak.
class HeavyResource {
init() {
print("Og'ir resurs boshlatildi")
// Resursga boy boshlashni simulyatsiya qilish
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// lazy xususiyat, birinchi foydalanishda boshlanadi
lazy var heavyResource: HeavyResource = {
print("Og'ir resurs yaratilyapti")
return HeavyResource()
}()
init() {
print("\(name) boshlatildi")
}
func accessResource() {
print("Og'ir resursga kirish...")
_ = heavyResource // Bu yerda lazy xususiyat boshlanadi
print("Resursga kirildi")
}
}
// Presenterni boshlash
let presenter = MyPresenter() // Chiqish: Presenter boshlatildi
// Resursga kirish keyinchalik, haqiqatan ham kerak bo'lsa
presenter.accessResource()
/*
Chiqish:
Og'ir resursga kirish...
Og'ir resurs yaratilyapti
Og'ir resurs boshlatildi
Resursga kirildi
*/
// Takroriy kirish, qayta boshlashni chaqirmaydi
presenter.accessResource()
/*
Chiqish:
Og'ir resursga kirish...
Resursga kirildi
*/