ios tableview изображения не освобождают память - PullRequest
0 голосов
/ 16 марта 2012

Простой сценарий: контроллер табличного представления, с 5000 строк. У меня есть 5000 изображений с именами от 0.png до 4999.png.

Вот мой cellForRowAtIndexPath: метод:

статический NSString * CellIdentifier = @ "Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSString *string = [NSString stringWithFormat:@"%d",indexPath.row];
UIImage *img = [UIImage imageNamed:string];

if (img) {
    cell.imageView.image  = img;
} else {
    cell.imageView.image = [UIImage imageNamed:@"NoPhotoDefault"];
}   
return cell;

Я проанализировал поведение инструментов и показал, что реальное использование памяти быстро увеличивается при прокрутке и никогда не падает.

Он начинается примерно с 8 МБ и достигает 200 МБ при достижении последней строки.

Что мне здесь не хватает?

Спасибо

P.S. Proj база SDK составляет 5,0, и с использованием ARC.

Позднее редактирование, при отправке приложения в фоновом режиме память освобождается.

1 Ответ

1 голос
/ 16 марта 2012

UIImage кэширует изображения при использовании метода imageNamed:. Это позволяет избежать перезагрузки одного и того же изображения при многократном использовании.

Этот метод ищет в системных кэшах объект изображения с указанным именем и возвращает этот объект, если он существует. Если соответствующий объект изображения еще не находится в кэше, этот метод загружает данные изображения из указанного файла, кэширует его и затем возвращает полученный объект.

Если вы хотите избежать кэширования изображений, используйте imageWithContentsOfFile:.

Этот метод не кэширует объект изображения.

...