Sobes.tech
Back to questions
Junior — Middle
74

Какова роль слабых (weak) и безвладельческих (unowned) ссылок в управлении памятью в языках программирования?

Companies where asked
БКС

Answer from AI

sobes.tech AI

Слабые (weak) и безвладельческие (unowned) ссылки используются для управления памятью и предотвращения циклических ссылок, которые могут привести к утечкам памяти.

  • Weak-ссылки — это ссылки, которые не увеличивают счетчик ссылок объекта. Если объект, на который ссылается weak-ссылка, удаляется, weak-ссылка автоматически становится nil (в Swift). Это полезно, когда нужно избежать сильных циклов, например, между делегатом и владельцем.

  • Unowned-ссылки — тоже не увеличивают счетчик ссылок, но предполагается, что объект всегда существует во время использования ссылки. Если объект уже удалён, обращение к unowned-ссылке приведёт к ошибке (crash). Используются, когда жизненный цикл ссылочного объекта гарантированно дольше, чем у ссылки.

Пример в Swift:

class Person {
    var apartment: Apartment?
}

class Apartment {
    weak var tenant: Person?  // weak, чтобы избежать цикла
}

Здесь weak-ссылка предотвращает удержание объекта Person в памяти, если он больше не нужен.