2014-01-11 4 views
0

Я создаю UItableView с пользовательскими ячейками, которые отображают изображения. Проблема в том, что при прокрутке вниз предыдущие ячейки, похоже, не делают dealloc, и память устройства заполняется.UITableView Cells do doalloc

Это мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *simpleTableIdentifier = @"SimpleTableItem"; 
    CustomTableCellView *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath]; 

    if (cell == nil) { 
     cell = [[CustomTableCellView alloc] initWithStyle:UITableViewCellStyleDefault 
              reuseIdentifier:simpleTableIdentifier]; 
    } 

    Article *tempArticle = [_objects objectAtIndex:indexPath.row]; 
    cell.titel.text = tempArticle.title; 
    cell.subTitle.text = tempArticle.subTitle; 
    cell.category.text = tempArticle.category; 
    if(tempArticle.imageUrl){ 
     [cell.image setImageWithURL:[NSURL URLWithString:tempArticle.imageUrl]]; 
    } else { 
     cell.image.image = [UIImage imageNamed:@"video"]; 
    } 

    return cell; 
} 

enter image description here

+0

Клетки не освобождаются от вида таблицы, потому что они повторно используются. Если вы поместите контрольную точку внутри своего 'if', вы заметите, что после начальной загрузки она больше не останавливается там, потому что таблица может деактивировать существующую ячейку. Проблема, скорее всего, в другом месте. –

+0

Вы предполагаете, что ячейки не освобождаются. Запустите приложение с помощью инструментов и сделайте пару снимков памяти, чтобы точно определить, какие объекты используют память. – Abizern

+0

Хорошо, я понял, что он используется повторно, но почему он заполняет память? – Verendus

ответ

0

Я на 99% уверен, что увеличение памяти связано с загрузкой изображения & кеширование. AFnetworking использует экземпляр NSCache для кэширования загруженных изображений, этот кеш выполняется в памяти, и он будет истощен, когда система решит, что у него низкая память, это не проблема.

Также метод imageNamed кэширует изображения, загружаемые так же, как AFNetworking.

Чтобы проверить, есть ли у вас утечка или что-то не работает должным образом с вашими данными, проверьте, увеличивается ли память после прокрутки резервной копии, если память остается прежней, чем у вас нет проблемы, утечка (также вы можете проверить утечки с помощью инструментов), кешированные изображения - это те, которые вызывают увеличение памяти.

Также удалите из стека контроллер вида (поп, удалить), это приведет к некоторому освобождению от разложения текста, меток или других данных (а не изображений), если память уменьшится (это не будет существенным уменьшением) то вы на правильном пути.

0

Как указано выше, вы правильно установки идентификатора повторного использования.

Может быть, это заполнение памяти, потому что вы используете AFNetworking библиотеки и загрузку изображений для ваших клеток? Определите «заполнение памяти» точнее, пожалуйста.

+0

Хорошо, когда я имею в виду «заполнение память ", я имею в виду, что в качестве прокрутки используется больше памяти устройства. Вероятно, это изображение, которое занимает память. И даже если я удалю [ячейку.image setImageWithURL: [NSURL URLWithString: tempArticle.imageUrl]]; все еще занимает больше памяти, чем прокрутка вниз, но не так много. Какой текст я догадываюсь. – Verendus

Смежные вопросы