Junior — Middle
Koja je razlika između korišćenja ključnih reči 'unowned' i 'strong' prilikom deklarisanja referenci u Swift-u?
sobes.tech АИ
Одговор од АИ
U Swift-u, ključne reči strong i unowned koriste se za upravljanje referencama i sprečavanje ciklusa zadržavanja (retain cycles).
-
strong — to je standardna snažna referenca koja povećava brojač referenci objekta. Dok postoji bar jedna snažna referenca, objekat neće biti uklonjen iz memorije.
-
unowned — to je slaba, ali neopciona referenca. Ne povećava brojač referenci, ali pretpostavlja da objekat na koji se odnosi uvek postoji tokom korišćenja te reference. Ako je objekat već uklonjen, pristup
unownedreferenci izazvaće grešku u izvršenju.
Primer:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt
Ovde je tenant deklarisan kao unowned jer stan ne treba da drži osobu snažnom referencom, da bi se izbegao ciklus, ali se pretpostavlja da osoba postoji duže od stana.