Sobes.tech
Junior — Middle

Ar įmanoma įgyvendinti mechanizmą, kuris stebi objektus naudodamas silpnus nuorodas, neleidžiant jų pašalinti šiukšlių surinkėjui?

sobes.tech AI

Atsakymas iš AI

Taip, iOS (ir Swift) yra silpnų nuorodų (weak references) mechanizmas, kuris leidžia stebėti objektus nesilaikant jų atmintyje ir užkertant kelią jų pašalinimui iš šiukšlių surinkėjo (ARC).

Silpna nuoroda nepadidina objekto nuorodų skaitiklio, todėl kai nėra jokių stiprių nuorodų, objektas išlaisvinamas iš atminties.

Swift pavyzdys, kaip naudoti silpną nuorodą:

class Person {
    let name: String
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    weak var tenant: Person?  // silpna nuoroda
}

var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person

person = nil  // Person objektas bus ištrintas, nes nėra stiprių nuorodų

print(apartment?.tenant)  // nil

Taip, silpnos nuorodos leidžia stebėti objektus, nesukeliant jų pašalinimo kliūčių.