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

Я пытаюсь найти утечки в своем приложении с помощью инструмента утечки. Когда приложение запускается, я вижу 106 утечек, и мне трудно их найти.

введите здесь описание изображения

На изображении вы можете увидеть часть списка, но как я могу перейти к классу или строке кода, которая генерирует утечку?


person ironRoei    schedule 27.03.2019    source источник
comment
Перед любым продвинутым используйте график отладки памяти, чтобы найти эти фиолетовые ! и решить их.   -  person E.Coms    schedule 27.03.2019
comment
@E.Coms, можешь уточнить?   -  person ironRoei    schedule 27.03.2019
comment
поиск debug memory graph в SO. например, здесь   -  person E.Coms    schedule 27.03.2019


Ответы (3)


Найти утечку не так просто. Вам нужно надеть кепку детектива, достать из пальто увеличительное стекло и начать искать след. то есть

Для каждого просочившегося объекта есть ответственная библиотека. Если это UIKit, Foundation или что-то низкоуровневое, вы не сможете указать местонахождение кода, вызывающего утечку, поскольку эти библиотеки представлены в виде двоичных файлов.

Если вы пишете ответственную библиотеку, вы можете перейти к коду, щелкнув нужный метод на панели трассировки стека справа. Подсказка заключается в том, что методы, перечисленные на панели трассировки стека, выделяются, если доступен соответствующий код.

Но, поскольку это не так просто, часто ваш собственный фрагмент кода вызывает утечку некоторой внутренней библиотеки, которую трудно отлаживать. Прежде чем начать, вам нужно пройти несколько учебных пособий и практических материалов. Что-то, конечно, не отвечающее на stackoverflow.

person HAK    schedule 27.03.2019
comment
Проблема в том, что я не могу получить доступ к своему коду через панель трассировки стека. Что-то не так, что я делаю? - person ironRoei; 27.03.2019

Вы можете увидеть стек трижды в правой части экрана. И после этого прокрутить до класса и метода, которые создают утечку. Иногда трудно понять, почему у вас течь.

Взгляните на мое изображение введите здесь описание изображения

У меня есть TerminalViewController, и у меня есть строка NSMuttableAttributed, которая создает утечки памяти. Также, если я выберу строку с помощью TerminalViewController.setupInfoText(), она откроет код.

person m1sh0    schedule 27.03.2019

Если вы хотите найти код, выделяющий утечку памяти, переключитесь на представление дерева вызовов с помощью панели перехода. Чтобы найти код в дереве вызовов, инвертируйте представление дерева вызовов и скройте системные библиотеки.

введите здесь описание изображения

Двойной щелчок по одной из ваших функций в дереве вызовов позволит вам перейти к строке кода, которая выделила утечку памяти.

Прочтите следующую статью для получения более подробной информации об использовании инструментов для поиска утечек памяти:

Измерение использования памяти вашим приложением с помощью инструментов

person Mark Szymczyk    schedule 27.03.2019
comment
Итак, я сделал это, и я получил некоторые части головоломки. Я вижу, что большая часть утечек происходит из-под какаоподов, таких как: alamofire, swinjectstoryboard и так далее. это имеет смысл? кроме того, я все еще могу получить доступ к некоторому фактическому коду - person ironRoei; 28.03.2019
comment
Возможно, внешние фреймворки в CocoaPods имеют утечки памяти. Я не использовал инструменты с CocoaPods, поэтому не могу сказать вам, есть ли способ определить, какие утечки есть в вашем коде, а какие — в CocoaPods. - person Mark Szymczyk; 28.03.2019