Junior — Middle
Каква е разликата между типовете препратки Strong и Weak в управлението на паметта и моделa на препратките?
sobes.tech AI
Отговор от AI
Strong-връзка — това е обикновена силна връзка към обект, която увеличава броя на препратките (retain count) към този обект. Докато съществува поне една силна връзка, обектът няма да бъде изтрит от паметта.
Weak-връзка — това е слабата връзка, която не увеличава броя на препратките към обекта. Тя се използва за предотвратяване на цикли на задържане (retain cycles). Ако обектът, към който сочи слабата връзка, бъде изтрит, слабата връзка автоматично става nil.
Пример в Swift:
class Person {
var name: String
init(name: String) { self.name = name }
var apartment: Apartment?
}
class Apartment {
let unit: String
weak var tenant: Person? // слабата връзка за избягване на цикъл
init(unit: String) { self.unit = unit }
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john // слабата връзка
Тук слабата връзка tenant не държи обекта Person, което позволява да се избегнат изтичания на памет.