![enter image description here](https://i.stack.imgur.com/j8qBE.png)
Шаг 1. Выберите инструмент Allocations
- Выберите шаблон профилирования для Распределений:
![enter image description here](https://i.stack.imgur.com/qBOYt.png)
- В главном интерфейсе инструментов нажмите VM Tracker, если он есть, и нажмите клавишу Delete, поскольку вам не нужен этот конкретный инструмент:
![enter image description here](https://i.stack.imgur.com/o4Ys3.png)
Нажав кнопку «плюс» в правом верхнем углу, вы можете добавить больше инструментов для различных видов тестирования, но я не буду описывать их в этом руководстве.
Шаг 2. Установите настройки инструментов
Перед выполнением любого анализа необходимо сделать несколько вещей. Во-первых, вам нужно подключить устройство iOS, на котором установлено ваше приложение. Это должно быть физическое устройство, поскольку симулятор iOS все еще является симулятором и может не точно отображать использование памяти в вашем приложении или то, как приложение может работать под давлением памяти.
Чтобы выбрать цель, нажмите Мой компьютер в верхней части, наведите курсор мыши на свое устройство и выберите приложение из подменю:
![enter image description here](https://i.stack.imgur.com/fbjEU.png)
Далее, есть панель, где вы можете изменить настройки для типов распределений, которые вы будете просматривать. Помимо проверки того, что пузырек Created & Persistent отмечен, вам не нужно ничего делать заранее.
![enter image description here](https://i.stack.imgur.com/p9KoY.png)
Шаг 3. Нажмите запись, чтобы запустить прибор
Как только вы нажмете кнопку записи в левом верхнем углу, ваше приложение запустится на вашем устройстве, и инструменты начнут составлять график ваших распределений. Все, что вам нужно сделать, - это запустить ваше приложение, сосредоточившись на возможных проблемных областях, чтобы увидеть, выделяет ли больше памяти, чем освобождает. Это может означать выполнение множества повторяющихся заданий, но вы поблагодарите себя позже.
Вы должны увидеть что-то вроде этого:
![enter image description here](https://i.stack.imgur.com/umIan.png)
Я рекомендую один раз запустить ваше приложение и достичь стабильной точки в памяти, чтобы у вас была хорошая базовая линия, которая сделает любое увеличение заметным. Когда вы убедитесь, что у вас достаточно данных для тестирования, нажмите кнопку остановки в верхнем левом углу.
Шаг 4. Анализ
- Первое, что я делаю, это устанавливаю свой диапазон проверки для измерения общего количества постоянных байтов на моей базовой линии. Этот постоянный номер байта находится прямо под сводкой распределения.
![enter image description here](https://i.stack.imgur.com/HrJDb.png)
Чтобы фактически установить диапазон контроля, используйте сочетание клавиш Команда <</strong> для левого диапазона контроля и Команда> для правого диапазона контроля. В нашем приложении базовый уровень составляет около 20 МБ.
![enter image description here](https://i.stack.imgur.com/LFgLj.png)
- Затем я перемещаю свой правый диапазон проверки в точку, где я снова запустил приложение и вернулся к нашему корню. Здесь видно, что память примерно такая же. Таким образом, выполнив это еще несколько раз и увидев, что ваша память возвращается к нашей базовой линии, вы можете предположить, что нет серьезных проблем с памятью.
![enter image description here](https://i.stack.imgur.com/Il1me.png)
Существуют различные способы анализа этих данных, которые я не буду здесь описывать, но имейте в виду, что существует целый раскрывающийся список способов просмотра и анализа ваших данных.
![enter image description here](https://i.stack.imgur.com/0ESuZ.png)
Шаг 5. Маркировка поколений
Если вы предпочитаете не иметь дело с диапазонами проверок, есть функция, называемая Mark Generation. На правой панели приборов есть кнопка для этого.
![enter image description here](https://i.stack.imgur.com/Y3xDR.png)
Эта кнопка будет отмечать точки на временной шкале инструментов в зависимости от того, где находится контрольная линия. Это делается для того, чтобы отслеживать все распределения с предыдущей отметки или с начала, если нет других отметок. Вы можете пометить поколения, когда вы запускаете инструмент распределения или после того, как вы остановили цикл, как в этом примере:
![enter image description here](https://i.stack.imgur.com/3ZcJC.png)
Шаг 6. Проверьте трассировку стека
Последнее, что нужно рассмотреть, - это посмотреть на трассировку стека. Для этого вы хотите установить диапазон проверки, чтобы выделить все распределения, а затем посмотреть на представление статистики, убедившись, что на правой панели выбран пузырь Created & Persistent . В статистическом представлении убедитесь, что постоянные байты отсортированы от старшего к младшему. Здесь много распределений, и может быть трудно понять, что происходит, поскольку многие из них являются системными.
![enter image description here](https://i.stack.imgur.com/dG6el.png)
углубляясь
- Посмотрите на самые большие выделения и нажмите на стрелку вправо. Часто внутри выделенных ресурсов будут выделяться ресурсы, и многие из них не будут иметь для вас значения.
![enter image description here](https://i.stack.imgur.com/J997n.png)
- Поскольку вы выделяете различные выделения после нажатия стрелки, продолжайте смотреть на расширенные детали на правой панели. В конце концов вы встретите какой-то жирный текст, который приведет к фактическому коду в вашем проекте, сообщая вам, в чем может быть проблема.
![enter image description here](https://i.stack.imgur.com/P0K7a.png)
- Если дважды щелкнуть один из элементов, выделенных жирным шрифтом в трассировке стека, вы перейдете к реальному коду (при условии, что вы выполнили выделение для собственного приложения).
![enter image description here](https://i.stack.imgur.com/oopuQ.png)
В этом представлении есть много полезных вещей, один из которых состоит в основном из желтых тегов справа, показывающих, сколько памяти занимает каждый вызов метода. Каждое приложение уникально, поэтому вам, разработчику, нужно решить, является ли выделенный метод проблемой, чем-то, что вы можете оптимизировать, или просто неизбежной частью вашего приложения.
В моем случае эта переменная UIColor является постоянной и используется в нашем приложении и, следовательно, приемлема на протяжении всего жизненного цикла нашего приложения.
найдено здесь