Junior — Middle
Ի՞նչ պատճառներ են դարձնում Unowned-ի օգտագործումը որոշ իրավիճակներում պակաս նախընտրելի։
sobes.tech AI
Պատասխան AI-ից
iOS (Swift)-ում unowned-ի օգտագործումը պակաս է նախընտրելի այն իրավիճակներում, երբ կա ռիսկ, որ unowned-ով հղված օբյեկտը կարող է ավելի վաղ ազատվել (deallocated), քան հղումը կօգտագործվի։ Բացառությամբ weak-ից, unowned-ը չի հանդիսանում ընտրովի և չի դառնում nil օբյեկտի ազատման ժամանակ, հետևաբար, նման հղումին մուտք գործելը հետո հանգեցնում է ծրագրի կոտրմանը (runtime error):
unowned-ից խուսափելու պատճառները՝
- Եթե օբյեկտի կյանքի ցիկլը չի երաշխավորում, որ հղումը միշտ կլինի վավեր:
- Երբ բարդ փոխադարձ հղումներ կան, որտեղ օբյեկտների ազատման կարգը անհայտ է:
այդ դեպքերում ավելի լավ է օգտագործել weak, որը ինքնաբերաբար դառնում է nil, կանխելով անսպասելի կոտրումը:
Օրինակ՝
class A {
unowned var b: B
init(b: B) { self.b = b }
}
class B {
var a: A?
}
Եթե B օբյեկտը ազատվի A- ից առաջ, ապա A- ի մեջ b-ին մուտքը կհանգեցնի սխալի։