Назад к вопросам
Junior
212
В чем разница между `weak` и `strong` ссылками в языке Swift?
Ответ от нейросети
sobes.tech AI
В Swift strong и weak ссылки относятся к управлению памятью и помогают избежать циклов удержания (retain cycles).
-
Strong ссылка — это обычная ссылка, которая увеличивает счётчик ссылок объекта. Пока есть хотя бы одна strong ссылка, объект не будет удалён из памяти.
-
Weak ссылка — это ссылка, которая не увеличивает счётчик ссылок. Она используется для ссылок, которые не должны удерживать объект в памяти, чтобы избежать циклов удержания.
Если объект, на который ссылается weak ссылка, удаляется, weak ссылка автоматически становится nil.
Пример:
class Person {
var name: String
var apartment: Apartment?
init(name: String) { self.name = name }
}
class Apartment {
let unit: String
weak var tenant: Person? // weak ссылка
init(unit: String) { self.unit = unit }
}
var john: Person? = Person(name: "John")
var unit4A: Apartment? = Apartment(unit: "4A")
john!.apartment = unit4A
unit4A!.tenant = john
john = nil // объект Person удалится, weak ссылка tenant станет nil
Таким образом, weak ссылки помогают избежать утечек памяти, позволяя объектам ссылаться друг на друга без создания циклов удержания.