Sobes.tech
Junior — Middle

Πώς μπορεί να γίνει μια αδύναμη αναφορά σε μια γλώσσα προγραμματισμού;

sobes.tech AI

Απάντηση από AI

Στο iOS (Swift), για τη δημιουργία μιας αδύναμης αναφοράς χρησιμοποιείται η λέξη-κλειδί weak. Μια αδύναμη αναφορά δεν αυξάνει τον μετρητή αναφορών του αντικειμένου, βοηθώντας στην αποφυγή κύκλων διατήρησης και διαρροών μνήμης.

Παράδειγμα:

class Person {
    var name: String
    weak var apartment: Apartment? // αδύναμη αναφορά

    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    var tenant: Person? // ισχυρή αναφορά

    init(unit: String) {
        self.unit = unit
    }
}

// Χρήση:
let john = Person(name: "John")
let unit4A = Apartment(unit: "4A")
john.apartment = unit4A
unit4A.tenant = john

Σε αυτό το παράδειγμα, το Person περιέχει μια αδύναμη αναφορά σε Apartment για να αποφευχθεί ένας κύκλος διατήρησης μεταξύ Person και Apartment. Αν και οι δύο αναφορές ήταν ισχυρές, τα αντικείμενα δεν θα απελευθερώνονταν από τη μνήμη.

Σημαντικό: οι αδύναμες αναφορές πρέπει να είναι προαιρετικές (?), καθώς το αντικείμενο στο οποίο αναφέρονται μπορεί να διαγραφεί.