Sobes.tech
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-ին, քանի որ քարտը չի կարող գոյություն ունենալ առանց հաճախորդի, և հաճախորդը երկար է ապրում քարտից։