Junior — Middle
Կարող եք բացատրել, թե ինչ է նշանակում 'Unowned' տերմինը հիշողության կառավարման համատեքստում?
sobes.tech AI
Պատասխան AI-ից
iOS (և Swift) հիշողության կառավարումի համատեքստում, տերմին "Unowned" նշանակում է թույլ թղթակցություն օբյեկտին, որը չի ավելացնում հղումների հաշվիչը (retain count), բայց ենթադրում է, որ օբյեկտը գոյություն ունի այդ հղում օգտագործելիս:
Տարբերություններ weak-ի հետ.
weakհղումը կարող է դառնալnil, եթե օբյեկտը ջնջվի, և այդ պատճառով այն հայտարարվում է որպես ընտրական:unownedհղումը ոչ ընտրական է և չի ավտոմատ կերպով դրվումnil:- Եթե
unowned-ով հղված օբյեկտը ջնջվի, փորձը մուտք գործելիս կհանգեցնի ժամանակային սխալի (crash):
Օգտագործվում է, երբ երաշխավորված է, որ հղված օբյեկտի կյանքի տևողությունը երկար է կամ հավասար է հղման կյանքի տևողությանը:
Օրինակ:
class Owner {
var pet: Pet?
}
class Pet {
unowned let owner: Owner
init(owner: Owner) {
self.owner = owner
}
}
let owner = Owner()
owner.pet = Pet(owner: owner)
Այստեղ, Pet պահպանում է unowned հղում Owner-ին, ենթադրելով, որ Owner-ը ապրում է ավելի երկար, քան Pet-ը։