Инструменты 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 modelsMetricKit для памяти в рабочей среде
Используйте 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 — локальная установка не требуется.
Все уроки этого курса
- Основы Instruments: Time Profiler
- Инструменты Allocations и Leaks
- Проверка главного потока и зависания
- Оптимизация узких мест: COW, встраивание и специализация