Что такое strong ссылка (strong reference) в управлении памятью Swift/Objective-C?

«Что такое strong ссылка (strong reference) в управлении памятью Swift/Objective-C?» — вопрос из категории Управление памятью, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Strong ссылка (strong reference) — это ссылка по умолчанию, которая увеличивает счетчик владения (retain count) объекта в системе ARC (Automatic Reference Counting), тем самым удерживая его в памяти и предотвращая освобождение.

Принцип работы: Пока существует хотя бы одна strong-ссылка на объект, он продолжает существовать. Когда последняя strong-ссылка обнуляется (например, переменной присваивается nil), ARC освобождает память.

Пример:

class Person {
    let name: String
    init(name: String) { self.name = name }
    deinit { print("(name) освобожден") }
}

var reference1: Person? = Person(name: "Анна") // Retain count = 1
var reference2: Person? = reference1 // Retain count = 2

reference1 = nil // Retain count = 1 (объект жив)
reference2 = nil // Retain count = 0 -> срабатывает deinit
// Консоль: "Анна освобожден"

Ключевые моменты:

  • Использование: Для выражения владения объектом. Это основной способ хранения и передачи объектов.
  • Проблема: Retain Cycle (цикл сильных ссылок) — когда два объекта удерживают друг друга strong-ссылками, они никогда не будут освобождены. Решается использованием weak или unowned ссылок для разрыва цикла.