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։