0Pricing
Swift Academy · Урок

Инструменты Allocations и Leaks

Отслеживайте выделения в куче, находите утечки памяти и объекты-зомби.

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

Инструмент распределения памяти

Инструмент распределения памяти отслеживает каждое выделение и освобождение памяти в куче, показывая её рост с течением времени.

// Instruments → Allocations template
// Shows live bytes, allocation count, and transient objects

Анализ роста кучи

Поработайте с приложением и следите за графиком Live Bytes. Постоянный рост без выхода на плато указывает на утечку памяти.

// Normal: allocations rise and fall as views appear/disappear
// Leak: allocations only grow, never released

Анализ поколений

Создайте снимок поколения до и после пользовательского сценария, чтобы увидеть, какие объекты неожиданно сохранились.

// Instruments toolbar → "Mark Generation"
// Perform action (e.g., open and close a screen)
// "Mark Generation" again
// Inspect objects in the new generation that weren't released

Инструмент обнаружения утечек

Инструмент обнаружения утечек периодически сканирует кучу и находит выделенные, но недостижимые объекты (циклы удержания).

// Run Leaks alongside Allocations in the "Leaks" template
// Red bars in the timeline = leaked objects detected
// Click a bar to see the leaked object graph

Чтение графа утечки

Граф объектов утечки показывает, какие объекты удерживают друг друга в цикле, помогая определить корень цикла удержания.

// Example cycle:
// ViewController → ViewModel → Closure → ViewController
// Instruments draws the reference edges visually

Обнаружение циклов удержания в замыканиях

Самая распространённая утечка возникает, когда замыкание сильно захватывает self, а self удерживает это замыкание.

class MyVC: UIViewController {
  var onComplete: (() -> Void)?
  override func viewDidLoad() {
    super.viewDidLoad()
    // LEAK: closure captures self; self holds onComplete
    onComplete = { self.dismiss(animated: true) }
    // FIX:
    onComplete = { [weak self] in self?.dismiss(animated: true) }
  }
}

Инструмент отслеживания виртуальной памяти

VM Tracker показывает области виртуальной памяти и изменённые страницы. Высокая нагрузка на изменённую память заставляет iOS завершить работу приложения.

// Instruments → "VM Tracker" in allocation instrument
// Look for: large __DATA dirty pages, high CG raster memory

Объекты-зомби

Включите «Zombie Objects» в Instruments, чтобы обнаруживать преждевременно освобождённые объекты: они превращаются в «зомби», которые записывают обращение к ним.

// Instruments → Edit → Record Settings → Enable Zombie Objects
// Accessing a zombie prints: "*** -[MyObject method] sent to deallocated instance"

Снимки кучи

Сравните два состояния кучи с помощью «Heap Shot», чтобы найти объекты, сохранившиеся между снимками. Это особенно удобно для обнаружения утечек контроллеров представлений.

// After navigating to and from a screen twice:
// Heap should return to baseline
// Objects remaining in the diff = leaked view controllers or models

MetricKit для памяти в рабочей среде

Используйте MXMetricPayload, чтобы собирать данные о памяти и производительности от реальных пользователей в рабочей среде.

import MetricKit
class AppDelegate: UIApplicationDelegate, MXMetricManagerSubscriber {
  func didReceive(_ payloads: [MXMetricPayload]) {
    payloads.forEach { print($0.memoryMetrics as Any) }
  }
}

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

На что указывает постоянно растущий график «Live Bytes» в инструменте распределения памяти?

Итоги урока

Используйте инструмент распределения памяти для отслеживания роста кучи и снимков поколений. Используйте инструмент обнаружения утечек для поиска циклов удержания и просмотра графа объектов. Используйте «Zombie Objects» для поиска ошибок преждевременного освобождения. Исправляйте замыкания с помощью [weak self]. Используйте MetricKit для отслеживания памяти у реальных пользователей в рабочей среде.

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

Урок «Инструменты Allocations и Leaks» бесплатный?

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

Чему я научусь в уроке «Инструменты Allocations и Leaks»?

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

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

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

Сколько времени занимает урок «Инструменты Allocations и Leaks»?

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

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

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

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

  1. Основы Instruments: Time Profiler
  2. Инструменты Allocations и Leaks
  3. Проверка главного потока и зависания
  4. Оптимизация узких мест: COW, встраивание и специализация
← Назад к Swift Academy