Ну, этот вопрос может звучать глупо, но ... Когда я запускаю свое приложение в режиме анализа или с помощью инструментов, я не могу получить возможность (анализировать режим) или утечку памяти (инструментов). Означает ли это, что мое приложение не содержит 100% утечек памяти?Анализ и инструменты
ответ
Нет. Во-первых, вам нужно будет запускать каждую возможную последовательность выполнения/последовательность в вашем приложении, чтобы окончательно сказать, что утечек при простом тестировании нет. Что еще более важно, истинные утечки памяти, в которых вы не выпускаете память, но больше не имеете ссылки на нее, - это все, что может обнаружить прибор для измерения утечек.
Тем не менее, это не единственная аналогичная проблема, которую вы можете создать. Вы также можете не отбрасывать данные, которые вам больше не нужны, в результате чего память накапливается. Это не настоящая утечка, поскольку у вас все еще есть ссылка на данные, о которых идет речь, просто вы не выпустили ее и не избавились от своей ссылки на нее.
Вы все еще можете найти эту проблему, используя инструмент распределения. Он не будет явно указывать проблемы, но это позволит вам увидеть, выделяете ли вы много памяти, которую вы не выпускаете позже. В частности, в iOS важно удостовериться, что вы отдаете выделенную память, когда она вам больше не нужна, или использование памяти вашего приложения будет расти до тех пор, пока ОС не прекратит ваше приложение.
вы можете предположить, что он находится в лучшем состоянии, в котором он может быть.
Не длинный выстрел. Существует около миллиона способов выделить память, которая не является ни утечкой, ни тем, что обнаружит анализатор, что все равно приведет к сбоям из-за исчерпания памяти. – bbum
Это действительно зависит от того, насколько хорошо вы протестировали его с утечками, но имейте в виду, что так сложно, как утечка пытается не пуленепробиваемым, хотя если вы выполните сквозную работу, вы можете быть достаточно уверены в своем приложении. Не забудьте также использовать инструменты, отличные от утечек, инструмент распределения полезен при сборе заброшенной памяти, которую только утечки не будут указывать на вас, но могут быть столь же неприятными.
Ваше приложение не запускается при анализе, вместо этого статический анализатор смотрит на ваш код. Что касается инструментов, убедитесь, что ваша конфигурация профиля (в схеме редактирования) настроена на отладку. В противном случае ваше приложение будет удалено из символов, а инструмент утечки не будет работать.
Неправда; утечки работают так же хорошо, как когда-либо с символами или без них. – bbum
Ну, я сделал несколько тестов, и я думаю, что у меня есть проблема, которую вы заметили в третьем абзаце. У меня небольшое увеличение памяти (живые байты) против тестирования с помощью Allocations. Эта часть кода просто переключается между двумя видами. Я считаю, что это проблема, не так ли? Живые байты показывают увеличение использования памяти примерно с 20 кбайт в 10 раз при переключении между видами. – objlv
Yup-- это может быть проблемой. Или это может быть кеш, который в конечном итоге будет сокращен. Следующий этап - анализ с помощью heapshot. http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/ – bbum
I Я проверю это. Благодаря ! – objlv