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
По този начин, слаби препратки позволяват проследяване на обекти, без да пречат на тяхното изтриване.