Sobes.tech
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, което позволява да се избегнат изтичания на памет.