Sobes.tech
Junior

Ի՞նչ է Swift-ում weak հիշողության մոդիֆիկատորը։

sobes.tech AI

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

weak փոփոխականը օգտագործվում է ուժեղ հղումային ցիկլերը խզելու համար օբյեկտների միջև, երբ մեկ օբյեկտ ունի ուժեղ հղում մյուսին, և այդ մյուսը նույնպես ունի ուժեղ հղում վերադառնալու համար:

weak-ի հիմնական հատկանիշները՝

  • Չէի ավելացնում հղումների հաշվիչը: weak-ի օգտագործումը չի ավելացնում օբյեկտի ուժեղ հղումների քանակը:
  • Может быть nil: Զուֆակային հղումը օպցիոնալ (Optional) է և ավտոմատ կերպով դառնում nil, երբ այն օբյեկտը, որի վրա հղում է, դեինիցյալիզացվում է:
  • Օգտագործվում է ծնող/երեխա հարաբերությունների համար: Շատ հաճախ կիրառվում է, երբ երեխա օբյեկտը ունի հղում իր ծնողին, որպեսզի կանխել ուժեղ հղումների ցիկլերը:
  • Պետք է հայտարարվի որպես var: Քանի որ զուֆակային հղումը կարող է դառնալ nil, այն պետք է լինի փոփոխական (var), ոչ թե հաստատում (let):

Օգտագործման օրինակ՝

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) սկսվում է ինիցիալիզացիան")
    }

    deinit {
        print("\(name) վերջանում է")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Զուֆակային հղում

    init(unit: String) {
        self.unit = unit
        print("Բնակարան \(unit) սկսվում է ինիցիալիզացիան")
    }

    deinit {
        print("Բնակարան \(unit) վերջանում է")
    }
}

Եթե Apartment դասում չկա weak var tenant: Person?, կստեղծվի ուժեղ հղումների ցիկլ, և Person և Apartment օրինակները չեն դեինիցյալիզացվի, երբ այլ ուժեղ հղումներ չեն մնա։ Շնորհիվ weak, երբ Person օրինակն դեինիցյալիզացվի, tenant հղումը Apartment-ում ավտոմատապես կդառնա nil։