Junior — Middle
Millal on parem kasutada weak või unowned mälu haldamisel arendajate meeskonnas?
sobes.tech AI
Vastus AI-lt
iOS-is, mälu haldamiseks ARC (Automaatne viitearvutamine) abil kasutatakse nõrku (weak) ja ohtlikke (unowned) viiteid, et vältida objektide hoidmise tsükleid.
-
weak kasutatakse siis, kui viide võib teatud hetkel muutuda nulliks, st. viidatud objekt võib eemaldada. Nõrk viide muudetakse automaatselt nulliks, kui objekt vabastatakse. Sobib olukordades, kus seos ei ole kohustuslik ja objekt võib kaduda.
-
unowned kasutatakse siis, kui viide peab alati osutama olemasolevale objektile ja ei saa olla null. Kui objekt vabastatakse ja unowned viide jääb, põhjustab see jooksuaegse vea. Tavaliselt kasutatakse unowned, kui viidatud objekti elutsükkel on garanteeritult pikem kui viite omanikul.
Näide:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // weak, kuna vanem võib varem eemaldada
}
// Või
class Customer {
let card: CreditCard
init() {
card = CreditCard(customer: self)
}
}
class CreditCard {
unowned let customer: Customer // unowned, kuna kaart ei saa eksisteerida ilma kliendita
init(customer: Customer) {
self.customer = customer
}
}
Kokkuvõte:
- Kasutage weak, kui viide võib muutuda nulliks ja soovite vältida hoidmis-tsükleid.
- Kasutage unowned, kui viide peab alati olema kehtiv ja objekt eksisteerib kauem kui viide.