Sobes.tech
Junior — Middle

Ինչպե՞ս է unowned-ի օգտագործումը ազդում օբյեկտի կյանքի ժամանակի կառավարման վրա ծրագրավորման մեջ։

sobes.tech AI

Պատասխան AI-ից

iOS (Swift)-ում, unowned բանալի բառը օգտագործվում է օբյեկտի թույլ թույլատրելի հղում հայտարարելու համար, որը չի ավելացնում հղումների հաշվիչը, բայց ենթադրում է, որ օբյեկտը կշարունակի գոյություն ունենալ հղման ողջ ընթացքում:

unowned-ի օգտագործումը օգնում է խուսափել ռեկուրսիվ հղումներից (retain cycles), որոնք կարող են հանգեցնել հիշողության լիքների: Բացառապես weak-ի հետ, unowned հղումը չի ընտրովի և չի դառնում nil օբյեկտի ազատման հետո, այդ պատճառով այն պետք է օգտագործել միայն այն դեպքում, երբ երաշխավորված է, որ օբյեկտը երկար ժամանակ կլինի հղումից հետո:

Օրինակ՝

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let unit: String
    unowned let tenant: Person
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A", tenant: john)
john.apartment = apt

Այստեղ, Apartment պահպանում է unowned հղում Person-ին, որպեսզի խուսափի ցիկլից, ենթադրելով, որ Person-ը միշտ կլինի, քանի դեռ Apartment-ը գոյություն ունի: Եթե Person-ը նախօրոք ջնջվի, unowned հղում հասանելիության ժամանակ կբերի սխալ՝ ժամանակի ընթացքում։