Sobes.tech
Back to questions
Junior
211

В чем разница между `weak` и `strong` ссылками в языке Swift?

Answer from AI

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 ссылки помогают избежать утечек памяти, позволяя объектам ссылаться друг на друга без создания циклов удержания.