У меня есть UITableView с примерно 400 ячейками в 200 разделах, и он немного вяло реагирует на взаимодействие с пользователем (прокрутка, выбор ячеек). Я убедился, что методы извлечения ячеек и представлений заголовков работают по минимуму во время работы, и Не думаю, что делаю что-то необычное, чтобы замедлить работу. Ячейки и заголовки содержат только фоновое изображение и текст. У кого-нибудь еще была такая проблема, и знаете ли вы, как заставить ее работать немного быстрее?
Изменить: я предлагаю вознаграждение, потому что хотел бы получить полезные отзывы по этому поводу. Я не думаю, что ответ заключается в проблеме в моем коде. Вместо этого я ищу стратегии перепроектирования UITableView, чтобы он работал быстрее. Я полностью открыт для добавления нового кода и с нетерпением жду того, что вы скажете.
Медлительность наблюдается как на симуляторе, так и на моем устройстве, iPhone 4. Вот мои реализации viewForHeaderInSection
и cellForRowAtIndexPath
, которые являются единственными UITableViewDelegate
методами, реализованными нетривиально. Я повторно использую ячейки и представления заголовков.
- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) section
{
HaikuHeaderView* view= [m_sectionViews objectAtIndex:section];
NSMutableArray* array= [m_haikuSearch objectAtIndex:section];
Haiku* haiku= [array objectAtIndex:0];
[view.poetLabel setText:[haiku nameForDisplay]];
return view;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
cell.backgroundView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cell gradient2.png"]];
// (Set up a bunch of label attributes in the cell...)
}
NSMutableArray* array= [m_haikuSearch objectAtIndex:indexPath.section];
Haiku* haiku = [array objectAtIndex:indexPath.row];
cell.textLabel.text = [haiku.m_lines objectAtIndex:0];
return cell;
}