Junior — Middle
Ի՞նչ դեպքերում է ավելի լավ օգտագործել 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-ին, քանի որ քարտը չի կարող գոյություն ունենալ առանց հաճախորդի, և հաճախորդը երկար է ապրում քարտից։