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-დან, წვდომა b-ზე A-ში გამოიწვევს შეცდომას.