Sobes.tech
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-ը։