Sobes.tech
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-ին մուտքը կհանգեցնի սխալի։