Ответ
Memory Graph (или Debug Memory Graph) — это визуальный инструмент отладки в Xcode, который показывает граф объектов, находящихся в памяти во время выполнения приложения, и связи между ними. Его основная цель — обнаружение циклических сильных ссылок (retain cycles) и других аномалий управления памятью.
Как использовать:
- Запустите приложение в Xcode.
- Во время работы нажмите кнопку Debug Memory Graph (иконка графа на панели отладки).
- Xcode сделает снимок памяти и отобразит все живые объекты в виде узлов графа. Стрелки указывают на сильные ссылки.
Пример проблемы в графе:
class ViewController: UIViewController {
var closure: (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
// Цикл: self сильно ссылается на closure, а closure сильно ссылается на self
closure = {
self.doSomething() // Захват self без [weak self]
}
}
func doSomething() {}
}
В Memory Graph вы увидите, что ViewController и захваченный им closure указывают друг на друга, образуя цикл, который не позволит ARC освободить память.
Что искать в Memory Graph:
- Неожиданные сильные ссылки: Объекты, которые должны были быть освобождены, но остаются в памяти.
- Циклы: Два или более объекта, ссылающихся друг на друга через сильные ссылки.
- Массовые удержания: Один объект удерживает огромную подграфу других объектов.
Преимущества перед Instruments:
- Интерактивность: Можно щелкать по объектам, видеть их свойства и ссылки в реальном времени.
- Интеграция: Работает прямо в среде разработки, не требуя отдельного профилировщика.
- Наглядность: Визуальное представление упрощает понимание сложных связей.