Sobes.tech
Junior — Middle

Възможно ли е да се реализира механизъм, който следи обекти с помощта на слаби препратки, без да пречи на тяхното изтриване от събирача на боклук?

sobes.tech AI

Отговор от AI

Да, в iOS (и в Swift) съществува механизъм за слаби препратки (weak references), който позволява проследяване на обекти без да ги държи в паметта и да предотвратява тяхното изтриване от събирача на отпадъци (ARC).

Слабата препратка не увеличава броя на препратките към обекта, така че когато няма силни препратки, обектът се освобождава от паметта.

Пример за използване на слаба препратка в Swift:

class Person {
    let name: String
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    weak var tenant: Person?  // слаба препратка
}

var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person

person = nil  // обектът Person ще бъде изтрит, тъй като няма силни препратки

print(apartment?.tenant)  // nil

По този начин, слаби препратки позволяват проследяване на обекти, без да пречат на тяхното изтриване.