Junior
Τι είναι το lazy;
sobes.tech AI
Απάντηση από AI
Η λέξη-κλειδί lazy χρησιμοποιείται για την καθυστερημένη αρχικοποίηση μιας ιδιότητας.
Μια ιδιότητα με lazy αρχικοποιείται μόνο κατά την πρώτη πρόσβαση σε αυτήν. Αυτό είναι χρήσιμο για:
- Απόδοση: αν η δημιουργία του αντικειμένου απαιτεί πολλούς πόρους, αλλά δεν είναι πάντα απαραίτητο.
- Αποφυγή κυκλικών εξαρτήσεων κατά την αρχικοποίηση.
- Εργασία με εξωτερικούς πόρους ή δεδομένα που ενδέχεται να μην είναι διαθέσιμα κατά τη δημιουργία του αντικειμένου.
Οι ιδιότητες lazy πρέπει να είναι:
- Μεταβλητές (
var), καθώς η τιμή τους μπορεί να αλλάξει κατά την πρώτη πρόσβαση. - Χωρίς παρατηρητές ιδιοτήτων (
willSet,didSet) μέχρι την πρώτη πρόσβαση.
class HeavyResource {
init() {
print("Βαρύς πόρος αρχικοποιήθηκε")
// Προσομοίωση δαπανηρής αρχικοποίησης
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// ιδιότητα lazy, αρχικοποιείται κατά την πρώτη χρήση
lazy var heavyResource: HeavyResource = {
print("Δημιουργία βαρύ πόρου")
return HeavyResource()
}()
init() {
print("\(name) αρχικοποιήθηκε")
}
func accessResource() {
print("Πρόσβαση σε βαρύ πόρο...")
_ = heavyResource // Εδώ γίνεται η αρχικοποίηση της ιδιότητας lazy
print("Πόρος προσπελάστηκε")
}
}
// Αρχικοποίηση του παρουσιαστή
let presenter = MyPresenter() // Έξοδος: Presenter αρχικοποιήθηκε
// Η πρόσβαση στον πόρο γίνεται αργότερα, όταν πραγματικά χρειάζεται
presenter.accessResource()
/*
Έξοδος:
Πρόσβαση σε βαρύ πόρο...
Δημιουργία βαρύ πόρου
Βαρύς πόρος αρχικοποιήθηκε
Πόρος προσπελάστηκε
*/
// Η επαναληπτική πρόσβαση δεν προκαλεί επανεκκίνηση
presenter.accessResource()
/*
Έξοδος:
Πρόσβαση σε βαρύ πόρο...
Πόρος προσπελάστηκε
*/