Когда в ARC (Swift) увеличивается счетчик ссылок на объект?

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

Ответ

Счетчик сильных ссылок увеличивается, когда на объект создается новая сильная (strong) ссылка. Это происходит автоматически в ARC при:

  1. Присваивании переменной:
    let object = MyClass() // Retain count = 1
    let anotherReference = object // Retain count = 2
  2. Передаче в функцию или замыкание (если параметр не помечен как weak/unowned):
    func process(obj: MyClass) { /* Retain count увеличивается на время вызова */ }
    process(obj: object)
  3. Добавлении в коллекцию (например, массив), которая хранит сильные ссылки:
    var array = [MyClass]()
    array.append(object) // Retain count увеличивается

Важное уточнение: Счетчик увеличивается именно для сильных ссылок. Ссылки weak и unowned не увеличивают retain count, поэтому не предотвращают освобождение памяти.

Практическое правило: Рост счетчика — это «владение» объектом. Уменьшение (см. предыдущий вопрос) — это «отказ от владения».