Дар кадом ҳолатҳо истифодаи unowned дар ҷойи weak дар идоракунии хотира беҳтар аст?
sobes.tech AI
Ҷавоб аз AI
Дар Swift, weak ва unowned истифода мешаванд, то гардиши ишораҳои қавӣ пешгирӣ карда шаванд, аммо дар ҳолатҳои гуногун татбиқ мешаванд:
-
weakишораи имконотӣ аст, ки худ ба худnilмешавад, вақте ки объекте, ки ба он ишора мекунад, озод мешавад. Он дар ҳолатҳое истифода мешавад, ки ишора дар давоми ҳаёти объект метавонадnilшавад. -
unownedишораи ғайри-имконот аст, ки тахмин мезанад, ки объекте, ки ба он ишора мекунад, ҳамеша дар вақти истифодаи ин ишора вуҷуд хоҳад дошт. Агар объект озод шавад, дастрасӣ баunownedдар вақти иҷро хато хоҳад овард.
Интихоб кардан барои истифодаи unowned вақте беҳтар аст, ки:
- Ишора ҳамеша бояд ба объекте, ки вуҷуд дорад, ишора кунад (масалан, объекте, ки калонтар аст ва аз кӯдак дарозтар зиндагӣ мекунад).
- Шумо боварӣ доред, ки давомнокии ҳаёти объекте, ки ба он ишора мекунед, кӯтоҳтар аз давомнокии ишора нахоҳад буд.
Масалан:
class Customer {
let name: String
var card: CreditCard?
init(name: String) {
self.name = name
}
}
class CreditCard {
let number: UInt64
unowned let customer: Customer
init(number: UInt64, customer: Customer) {
self.number = number
self.customer = customer
}
}
let john = Customer(name: "John Appleseed")
john.card = CreditCard(number: 1234_5678_9012_3456, customer: john)
Ин ҷо, CreditCard дорои ишораи unowned ба Customer аст, зеро корт наметавонад бе мизоҷ вуҷуд дошта бошад, ва мизоҷ дарозтар аз корт зиндагӣ мекунад.