Swift Academy · Урок

Как ARC подсчитывает ссылки

Узнайте, что ARC делает во время компиляции, как работают вызовы retain/release и каков срок жизни объектов.

Урок 1 из 412 шагов

«Как ARC подсчитывает ссылки» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

Automatic Reference Counting (ARC) управляет памятью экземпляров классов. Понимание того, как подсчитываются ссылки, помогает писать код без утечек памяти.

Что делает ARC

ARC отслеживает количество *сильных* ссылок на каждый экземпляр класса. Когда счётчик достигает нуля, ARC вызывает `deinit` и освобождает память — автоматически.

Сильные ссылки

```swift var a: Dog? = Dog(name: "Rex") // count = 1 var b = a // count = 2 a = nil // count = 1 b = nil // count = 0 → deinit ```

ARC работает во время компиляции

ARC вставляет вызовы retain/release во время компиляции, а не во время выполнения, как сборщик мусора. Это означает: • Нет пауз сборки мусора • Детерминированное освобождение памяти • Небольшое увеличение размера кода из-за вызовов retain/release

Риск цикла сильных ссылок

```swift class Node { var next: Node? } var n1: Node? = Node() var n2: Node? = Node() n1?.next = n2 n2?.next = n1 // cycle! n1 = nil; n2 = nil // both stuck at count=1 — leaked! ```

Подсчёт ссылок при использовании нескольких переменных

```swift class Engine {} var car1: Engine? = Engine() // count = 1 var car2 = car1 // count = 2 var car3 = car2 // count = 3 car1 = nil // count = 2 car2 = nil // count = 1 // Engine still alive — car3 holds it car3 = nil // count = 0 → deinit ```

ARC в коллекциях

```swift var dogs: [Dog] = [] dogs.append(Dog(name:"A")) // count = 1 dogs.append(Dog(name:"B")) // count = 1 each dogs.removeAll() // both deinit called ```

ARC НЕ применяется к типам-значениям

Структуры, перечисления и кортежи НЕ подсчитываются как ссылки: ```swift struct Point { var x, y: Double } // no retain/release var p1 = Point(x:1,y:2) var p2 = p1 // copy — no ARC ```

Наблюдение за ARC с помощью deinit

```swift class Cat { let name: String init(name: String) { self.name = name; print("\(name) born") } deinit { print("\(name) deallocated") } } var c: Cat? = Cat(name: "Luna") c = nil // "Luna deallocated" printed ```

Производительность ARC и сборщика мусора

• Сборщик мусора: периодически приостанавливает выполнение для сборки; компромисс между пропускной способностью и задержкой • ARC: освобождает память сразу после достижения счётчиком нуля; пауз нет • Накладные расходы ARC: каждое присваивание через сильную ссылку требует пары retain/release

Быстрая проверка

Когда ARC вызывает `deinit` и освобождает память объекта?

Итоги

Главное: • ARC отслеживает сильные ссылки на экземпляры классов • Счётчик 0 → вызван `deinit` → память освобождена • ARC работает во время компиляции — пауз сборщика мусора нет • Типы-значения (`struct`/`enum`) не управляются ARC • Циклы не дают счётчику достичь 0 → используйте weak/unowned Далее: циклы удержания.
Можно начать бесплатно

Изучай Swift с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
122
Уроки
409

Часто задаваемые вопросы

Урок «Как ARC подсчитывает ссылки» бесплатный?

Да — полный текст урока «Как ARC подсчитывает ссылки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Как ARC подсчитывает ссылки»?

Узнайте, что ARC делает во время компиляции, как работают вызовы retain/release и каков срок жизни объектов. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Как ARC подсчитывает ссылки»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Как ARC подсчитывает ссылки
  2. Циклы удержания: причины и обнаружение
  3. Ссылки weak и unowned
  4. Списки захвата замыканий и [weak self]
← Назад к Swift Academy