2016-07-22 6 views
1

Я запустил инструмент «Утечки» инструментов, чтобы проверить, есть ли у моего приложения какие-либо утечки, и он показал мне, что у меня есть утечки. Я не эксперт устранения утечек, мне было интересно, еслиУтечка памяти в iOS

  1. У меня есть утечка, и
  2. Что я должен сделать, чтобы исправить это.

enter image description here

+1

Я бы с осторожностью ответил: «Возможно, да, возможно, нет». Это небольшие объекты памяти и, похоже, их всего несколько. Детектор утечки * может ошибаться. Когда у вас действительно есть * утечка, этот дисплей продолжается для многих страниц.И, кроме того, со временем список будет заметно заметно * удлиняться *, и те же адреса будут оставаться в списке каждый раз, когда вы его увидите. Если это не то, что вы (ясно) видите ... и вы это точно узнаете, когда увидите его ... это может быть ложным положительным. –

ответ

4

Вы, по-видимому, есть утечка, но она выглядит скромно. Вы можете щелкнуть мышью по маленьким стрелкам рядом с адресом памяти, и он должен отобразить экран, на котором вы можете просверлить и посмотреть, где была выделена эта память, что является первым шагом в определении того, почему он не был освобожден. (Я бы начал объекты не malloc, так как чаще они более непосредственно отображают ваш код, и его легче диагностировать).

Но иногда вы увидите такие скромные утечки, которые, как сказал Майк Робинсон, ложные срабатывания. И даже если это не ложный позитив, он может исходить от ОС, сам, а не от вашего кода. Поэтому мы иногда проводим упражнение, действительно подчеркивающее приложение (например, многократно повторяя часть приложения, которое, казалось, создавало утечку), чтобы увидеть, насколько быстро происходит утечка, если вообще. Похоже, что ваша утечка может составлять менее 1 килобайта или около того и не будет продолжать расти, вы можете не беспокоиться об этом. (Или, по крайней мере, один раз вы убедились в том, что в коде нет ничего, что вызывает его.)

Лично меня больше беспокоят эти скромные утечки, чем значительный рост общего использования памяти. Это может быть просто кэширование изображений, или это может быть признаком некоторой заброшенной памяти (инструмент утечки не покажет вам). Я бы попытался имитировать предупреждение памяти и посмотреть, сколько из этой памяти восстановлено. Вы также можете перетащить график времени и перейти к представлению распределения, и вы можете узнать, что учитывает потребление этой памяти. Возможно, вы захотите убедиться, что у вас нет более глубокой проблемы с памятью, не связанной с умеренными утечками, сообщенными инструментом «Утечки». Не все проблемы с памятью появляются в «Утечках»: рост «Распределение» также может указывать на проблемы, и я был бы немного обеспокоен тем, что вы не видите, что использование вашей памяти падает до некоторого устойчивого уровня.

Apple поделилась графиком распределения примеров, посоветовав нам следить за красной «пустой» памятью. Часть прогрева не столь критично, равно как и промежуточный уровень (до тех пор, как это не слишком высокий), но рост стационарного уровня является признаком более серьезной проблемой памяти:

enter image description here

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

Если вы посмотрите (несколько устаревший, но все же релевантный) WWDC 2013 Fixing Memory Issues, он предоставит вам инструменты и методы для диагностики и устранения проблем с памятью. Именно здесь вышла вышеприведенная диаграмма и более подробно описывает ее. Обратите внимание: презентация в формате PDF хороша, но видео гораздо лучше, так как включает в себя некоторые практические демонстрации для использования инструментов. WWDC 2012 iOS App Performance: Memory также хорош. (Похоже, что могут возникнуть проблемы с потоковым воспроизведением видео, но похоже, что вы все равно можете загрузить его.)

+0

Отличный ответ Роб! –

Смежные вопросы