У меня возникают проблемы с производительностью при использовании некоторых подзонов на моем UITableViewCells
. После того, как я продолжаю прокручивать, он в конце концов начинает становиться очень медленным.Проблемы с производительностью UITableView при добавлении UIViews в cell.contentView
Первый шаг, который я делаю, создает общую ячейку UIView
для каждой ячейки, по существу, это создает белую ячейку с закругленным эффектом на ячейку с тенью. Производительность для этого кажется нормальной, поэтому я не думаю, что это преступник.
Вот код, я использую, чтобы сделать это:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *NewsCellIdentifer = @"NewsCellIdentifier";
NewsItem *item = [self.newsArray objectAtIndex:indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NewsCellIdentifer];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NewsCellIdentifer];
cell.contentView.backgroundColor = [UIColor clearColor];
UIView *whiteRoundedCornerView = [[UIView alloc] initWithFrame:CGRectMake(10,10,300,100)];
whiteRoundedCornerView.backgroundColor = [UIColor whiteColor];
whiteRoundedCornerView.layer.masksToBounds = NO;
whiteRoundedCornerView.layer.cornerRadius = 3.0;
whiteRoundedCornerView.layer.shadowOffset = CGSizeMake(-1, 1);
whiteRoundedCornerView.layer.shadowOpacity = 0.5;
[cell.contentView addSubview:whiteRoundedCornerView];
[cell.contentView sendSubviewToBack:whiteRoundedCornerView];
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
cell.layer.opaque = YES;
cell.opaque = YES;
}
[cell.contentView addSubview:[self NewsItemThumbnailView:item]];
return cell;
}
Вот метод, который возвращает вид эскизов графики и текста:
- (UIView *) NewsItemThumbnailView:(NewsItem *)item
{
UIView *thumbNailMainView = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 50, 70)];
UIImageView *thumbNail = [[UIImageView alloc] initWithImage:[UIImage imageNamed:item.ThumbNailFileName]];
thumbNail.frame = CGRectMake(10,10, 45, 45);
UILabel *date = [[UILabel alloc] init];
date.frame = CGRectMake(10, 53, 45, 12);
date.text = item.ShortDateString;
date.textAlignment = NSTextAlignmentCenter;
date.textColor = [BVColors WebDarkGrey];
CGFloat fontSize = 10.0;
date.font = [BVFont Museo:&fontSize];
date.opaque = YES;
thumbNail.opaque = YES;
thumbNailMainView.opaque = YES;
[thumbNailMainView addSubview:thumbNail];
[thumbNailMainView addSubview:date];
return thumbNailMainView;
}
проблема с производительностью, кажется, когда я добавляю представление миниатюр в ячейку, потому что, когда я прокомментирую эту строку, у меня ее нет. Информация о миниатюрах динамична и будет изменяться с каждой ячейкой. Я был бы признателен за любые советы о том, как я должен это делать, не ухудшая производительность.
Добавляя subview каждый раз, когда этот код называется, вы выращиваете коллекцию подпрограмм в UITableViewCell. Функция dequeing создает новую ячейку представления таблицы или захватывает существующую. Как только он начнет захватывать существующие ячейки, вы добавляете надпись UIImageView существующего UIImageView. В результате вы будете экспоненциально увеличивать UIImageView, которые должны отображаться для каждой ячейки. Это существенно замедлит ваше приложение. Мне нравится jszumski ответ ниже. – Rob