U kojoj situaciji je preporučljivo koristiti weak ili unowned za upravljanje memorijom u timu programera?
sobes.tech АИ
Одговор од АИ
U iOS-u, za upravljanje memorijom pomoću ARC (Automatsko brojanje referenci), koriste se slabe (weak) i nesigurne (unowned) reference kako bi se izbegli ciklusi zadržavanja objekata.
-
weak se koristi kada referenca može postati nil u nekom trenutku, tj. objekat na koji se odnosi može biti obrisan. Slaba referenca automatski se postavlja na nil kada se objekat oslobodi. Ovo je pogodno kada veza nije obavezna i objekat može nestati.
-
unowned se koristi kada referenca uvek treba da ukazuje na postojeći objekat i ne može biti nil. Ako je objekat oslobođen, a unowned referenca ostane, to će dovesti do greške u toku izvršavanja. Obično se unowned koristi kada je životni ciklus referenciranog objekta garantovano duži od vlasnika reference.
Primer:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // weak, jer parent može biti obrisan ranije
}
// Ili
class Customer {
let card: CreditCard
init() {
card = CreditCard(customer: self)
}
}
class CreditCard {
unowned let customer: Customer // unowned, jer kartica ne može postojati bez klijenta
init(customer: Customer) {
self.customer = customer
}
}
Rezime:
- Koristite weak kada referenca može postati nil i želite da izbegnete ciklus zadržavanja.
- Koristite unowned kada referenca uvek mora biti validna i objekat postoji duže od reference.