Sobes.tech
Junior — Middle

შესაძლებელია თუ არა სუსტი (unowned) მითითებების გამოყენებასთან დაკავშირებული სიტუაციები გამოიწვიოს აპლიკაციის ჩაშლა? მიაწოდეთ მაგალითი.

sobes.tech AI

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

დიახ, Swift- ში სუსტი (unowned) მითითებების გამოყენება შეიძლება გამოიწვიოს პროგრამის ჩაშლა, თუ მითითებული ობიექტი, რომლისკენაც unowned მითითება არის მიმართული, უკვე გათავისუფლებულია, და შემდეგ ამ მითითებაზე წვდომის მცდელობა ხდება.

Unowned მითითებები ვარაუდობს, რომ ობიექტი ყოველთვის არსებობს, სანამ მითითება ცოცხალია. თუ ეს ასე არ არის, პროგრამა ჩაშლის შეცდომით "EXC_BAD_ACCESS".

მაგალითი:

class Person {
    var apartment: Apartment?
}

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

var john: Person? = Person()
john!.apartment = Apartment(tenant: john!)

john = nil // Person ობიექტი გათავისუფლებულია

// ახლა apartment.tenant არის unowned მითითება უკვე გათავისუფლებული ობიექტისკენ
// მის მისაწვდომად მცდელობა გამოიწვევს ჩაშლას
print(john!.apartment!.tenant) // ჩაშლა

ასეთი ჩაშლების თავიდან ასაცილებლად, უნდა დარწმუნდეთ, რომ unowned მითითება არ გამოიყენება ობიექტის გათავისუფლების შემდეგ, ან გამოიყენეთ weak მითითებები, რომლებიც ხდება nil ობიექტის გათავისუფლების შემდეგ.