Sobes.tech
Junior — Middle

Swift-ში მითითებების გამოცხადებისას 'unowned' და 'strong' საკვანძო სიტყვების გამოყენების განსხვავება რა არის?

sobes.tech AI

პასუხი AI-სგან

Swift-ში strong და unowned საკვანძო სიტყვები გამოიყენება მითითებების მართვისა და შენარჩუნების ციკლების (retain cycles) თავიდან ასაცილებლად.

  • strong — ეს არის სტანდარტული ძლიერი მითითება, რომელიც ზრდის ობიექტის მითითებების გამოთვლას. მანამ, სანამ მინიმუმ ერთი ძლიერი მითითება არსებობს, ობიექტი არ მოიხსნება მეხსიერებიდან.

  • unowned — ეს არის სუსტი, მაგრამ არა ოპციონალური მითითება. ის არ ზრდის მითითებების გამოთვლას, მაგრამ ვარაუდობს, რომ მითითებული ობიექტი ყოველთვის არსებობს ამ მითითების გამოყენების დროს. თუ ობიექტი უკვე წაშლილია, unowned მითითებაზე წვდომა გამოიწვევს შესრულების დროს შეცდომას.

მაგალითი:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt

აქ, tenant გამოაცხადებულია როგორც unowned, რადგან ბინა არ უნდა უჭერდეს ადამიანს ძლიერი მითითებით, რათა თავიდან აიცილოს ციკლი, მაგრამ ვარაუდობს, რომ ადამიანი უფრო ხანგრძლივია, ვიდრე ბინა.