В навигационном приложении для iphone все время увеличивается память - PullRequest
1 голос
/ 24 августа 2010

У меня есть приложение на основе навигации с 5 ViewControllers. После проверки распределения памяти с помощью инструментов я обнаружил, что память постоянно увеличивается. Приложение запускается с 2 МБ, а после навигации по всем 5 навигационным контроллерам оно увеличивается до 10 МБ и считает ... Для каждого выделенного объекта в моем коде есть соответствующая версия (в dealloc или где-то еще), поэтому, очевидно, нет утечек памяти. Инструменты также говорят мне, что утечки памяти не обнаружены.

Как я могу решить эту проблему с памятью? В какой-то момент после навигации по представлениям вперед и назад появляется предупреждение о нехватке памяти, и фоновое изображение исчезает (я не освобождаю изображение, поэтому iphone делает это самостоятельно).

Как определить источник проблемы утечки памяти? Возможно ли, что изображения где-то кешируются и хранятся в памяти, пока приложение живо?

Я всегда выделяю изображения следующим образом:

UIImage *kaufpreisImage = [[UIImage alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"kaufpreis_background_green18px" ofType:@"png"]];

Изображения находятся в папке Resource.

Буду очень признателен за вашу помощь! Я не могу найти выход из этого!

Большое спасибо заранее

С уважением, Фил

Edit:

Единственная проблема остается, когда я пытаюсь отправить электронное письмо. Я хочу отправить электронное письмо, содержащее несколько HTML-таблиц и изображений внутри тела письма. Изображения в кодировке base64. После отправки нескольких писем я получаю предупреждение о нехватке памяти, хотя я освобождаю все содержимое (изображения, числа и т. Д.) Внутри метода sendMail ().

Кто-нибудь знает, если отправка изображений в кодировке base64 приводит к проблемам? Может ли кто-нибудь дать мне подсказку, как я могу отправлять изображения внутри тела электронной почты (например, в качестве фонового изображения внутри HTML-таблицы, например style = "background-url (data: image / png; base64,% @)")? Чтобы прояснить, это работает. Изображения отправляются клиенту (проверено на MacOS), но иногда возникает проблема с памятью ...

Большое спасибо

Ответы [ 3 ]

0 голосов
/ 24 августа 2010

Возможно, вам стоит попробовать функцию «Heapshot» в инструменте Allocation.Просто возьмите «Mark Heap», когда ваш первый контроллер запущен, затем перейдите и снова вернитесь.Сделайте еще один снимок кучи.Повторите этот процесс 8-10 раз.В списке heapshots вы увидите, что некоторая память была распределена между heapshot и следующим (иначе, если количество мало и стремится к нулю, это нормально), попробуйте проверить его, чтобы проверить, выделяете ли вы что-то, что остаетсяжив.

0 голосов
/ 24 августа 2010

Вы несете ответственность за освобождение экземпляров UIImage, если для их создания вы использовали [[UIImage alloc] init ...].

Если вы загружаете изображения из основного пакета, попробуйте использовать + (UIImage *) imageNamed: (NSString *) имя.Этот возвращенный UIImage возвращается автоматически выпущенным, поэтому вам не нужно освобождать его, и есть преимущество в том, что UIKit обрабатывает кэширование при использовании метода imageNamed.

0 голосов
/ 24 августа 2010

Вам необходимо выпустить эти изображения, как только вы станете их владельцем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...