#ios #swift #memory-leaks #out-of-memory
Вопрос:
У меня есть приложение для IOS, которое отображает изображения и текст в UITableView. Когда я прокручиваю вверх и вниз, я получаю этот неограниченный рост памяти. Я использовал распределения, чтобы попытаться выяснить, откуда берется этот рост памяти. Пожалуйста, смотрите ниже. Из того, что я вижу, CFString занимает огромный объем памяти. Похоже, что это не из моего кода(основанного на трассировке стека CFString), как показано на рисунке 2. Пожалуйста, может кто-нибудь посоветовать? Я действительно застрял. Мое приложение выходит из строя после нескольких минут прокрутки после превышения примерно 2 ГБ памяти. Я был бы признателен за любые общие указания о том, как отладить причины проблемы с памятью. Трассировка стека CFString отображается серым цветом, и я не уверен, как продолжить диагностику проблемы.
Рисунок 1 Я смотрю на CFString, и постоянная память огромна.
Рисунок 2 Щелчок по строке CFString:
Комментарии:
1. Посоветовать вам что!?
2. Как уменьшить постоянную память CFString. это разрушает мое приложение
3. Вы не показываете ни одной строки кода. Никто не может сказать, в чем проблема.
4. извините, я просто подумал, что трассировка стека даст мне представление о том, где искать. И поскольку все это скрыто серым цветом, накопление памяти CFString не связано с моим кодом. Мое приложение-это огромный проект, и я надеялся, что трассировка стека сможет сузить его, чтобы я мог опубликовать более клинический набор кода.
Ответ №1:
Попробуйте использовать приложение «Инструменты» в папке «Утилиты Xcode». В частности, вам нужен инструмент утечки. Он обнаружит утечку памяти, а затем поможет вам выяснить, где эта память выделяется.
Запустите свое приложение на некоторое время, затем разбейте его и изучите свою кучу. (Это довольно сложно и сложно в использовании. Гораздо больше, чем я могу объяснить в таком ответе. Я предлагаю выкопать видео WWDC или другой учебник по его использованию.)
В Xcode также есть простой инструмент для построения графиков памяти, который помечает просочившиеся блоки, но он не дает вам столько информации. (Это один из маленьких значков на панели отладки над консолью отладки. Значок представляет собой 3 маленьких кружочка с линиями между ними.)