Дар кадом ҳолат беҳтар аст, ки барои идоракунии хотира дар гурӯҳи таҳиягарон аз weak ё unowned истифода баред?
sobes.tech AI
Ҷавоб аз AI
Дар iOS, барои идоракунии хотира бо ёрии ARC (Ҳисоби худкории истинод), ба истинодҳои заиф (weak) ва номуҳофиз (unowned) истифода мешавад, то гирдоби нигоҳдории объектҳоро пешгирӣ кунад.
-
weak вақте истифода мешавад, ки истинод метавонад дар як вақт nil шавад, яъне, объекте, ки ба он ишора мекунад, метавонад хориҷ карда шавад. Истиноди заиф автоматӣ nil мешавад вақте, ки объект озод карда мешавад. Ин барои ҳолатҳое мувофиқ аст, ки пайванд зарурӣ нест ва объект метавонад нопадид шавад.
-
unowned вақте истифода мешавад, ки истинод ҳамеша бояд ба объекте, ки вуҷуд дорад, ишора кунад ва наметавонад nil шавад. Агар объект озод карда шавад ва истиноди unowned боқӣ монад, ин ба хато дар вақти иҷро оварда мерасонад. Одатан, unowned истифода мешавад, вақте ки давраи ҳаёти объекте, ки ишора мекунад, кафолат дода шудааст, ки дарозтар аз онест, ки соҳибаш дорад.
Масалан:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // weak, зеро parent метавонад пештар хориҷ шавад
}
// Ё
class Customer {
let card: CreditCard
init() {
card = CreditCard(customer: self)
}
}
class CreditCard {
unowned let customer: Customer // unowned, зеро карта наметавонад бе муштарӣ вуҷуд дошта бошад
init(customer: Customer) {
self.customer = customer
}
}
Хулоса:
- Вақте ки истинод метавонад nil шавад ва шумо мехоҳед гирдоби нигоҳдоштаро пешгирӣ кунед, weak истифода баред.
- Вақте ки истинод бояд ҳамеша дуруст бошад ва объект дарозтар аз истинод вуҷуд дошта бошад, unowned истифода баред.