UIButton setBackgroundImage потребляет много памяти - PullRequest
3 голосов
/ 01 марта 2010

Я использую следующий код:

UIImage *buttonImage;

if (p.placeImage != nil) {
    buttonImage = [UIImage imageWithData:p.placeImage];
} else {
    buttonImage = [UIImage imageNamed:@"bg_place_noimg.png"];
}

[imageButton setBackgroundImage:buttonImage forState:UIControlStateNormal];

При запуске приложения с помощью инструментов я вижу, что setBackgroundImage занимает много памяти. Однако, если я прокомментирую последнюю строку, этого не произойдет. Любая возможная причина?

EDIT:

Если используется p.placeImage == nil и imageNamed: @ "bg_place_noimg.png", использование памяти нормальное. p.placeImage - это Преобразуемое значение, которое я использую в Базовых данных для хранения изображений NSData, загруженных из Интернета.

Ответы [ 2 ]

1 голос
/ 01 марта 2010

Я не удивлен, что комментирование последней строки приводит к меньшему потреблению памяти. Когда вы устанавливаете это изображение в качестве фона вашей кнопки, изображение, скорее всего, сохраняется кнопкой, и поэтому изображение остается в памяти. Если вы не применяете изображение в качестве фона кнопки, счетчик сохранения UIImage равен 0, и поэтому его память может быть восстановлена ​​системой при необходимости.

Теория Кристофера о разнице между imageWithData и imageNamed также правильная . Ознакомьтесь с разделом Обсуждение каждого из этих инициализаторов в документации по UIImage.

0 голосов
/ 01 марта 2010

Я не уверен, но я предполагаю, что ваша проблема в том, что imageWithData: создает новое изображение каждый раз, тогда как метод imageNamed: возвращает одно и то же изображение снова и снова.

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

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