#iphone #objective-c #ios #memory-management #memory-leaks
#iPhone #objective-c #iOS #управление памятью #утечки памяти
Вопрос:
Я попытался профилировать приложение с помощью инструментов, чтобы увидеть, сколько памяти использует приложение и есть ли какие-либо утечки.
После небольшой настройки я избавился от пары утечек, и теперь они не отображаются. Однако я заметил, что каждый раз, когда я нажимаю на какой-либо контроллер просмотра и возвращаю его обратно, объем памяти увеличивается, затем немного уменьшается, но не до уровня, предшествующего нажатию, например, отображение живых байтов
- 1,8 МБ до запуска
- 2,1 МБ после нажатия
- 2,0 МБ после всплывающего
- 2,1 МБ после второго нажатия
Забавно, что после повторного нажатия на него (или даже 10 раз) оно не увеличивается по сравнению с предыдущим значением, поэтому, хотя это выглядит как утечка, это, вероятно, какой-то кеш или что-то в этом роде. Сначала я подумал, что это что-то специфичное для моего кода, но затем я смог воспроизвести это практически с любым контроллером просмотра, независимо от того, насколько простым оказывается содержимое.
Есть ли разумное объяснение этому явлению или я просто делаю что-то совершенно неправильное во всех примерах, которые я построил?
Ответ №1:
Это происходит из-за пулов автоматического освобождения и памяти, которая должна быть освобождена для вас. Оно сохраняется столько, сколько необходимо. Когда вы добавляете больше ViewControllers в стек, создается больше автоматически выпущенных объектов. Некоторые из них будут выпущены раньше других, но это произойдет очень вовремя, так что колебания объема вашей памяти нормальны.