Правильно ли вы выводите из очереди и повторно используете ячейки?
Было бы много чего оптимизировать, если бы вы повторно использовали ячейку, скажем, @ "SwitchCell", это бы сильно ускорило прокрутку. В настоящее время будет потрачено много времени на добавление переключателя в представление содержимого ячейки (разметка представлений и т. Д.) И выполнение других задач, которые должны выполняться только один раз за время существования ячейки, а не каждый раз, когда при прокрутке появляется новая ячейка.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Create cell
static NSString *CellIdentifier = @"SwitchCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UISwitch *tetherSw = [[UISwitch alloc] initWithFrame:CGRectMake(197, 8, 94, 27)];
tetherSw.tag = kDefaultSwTag;
[tetherSw addTarget:self action:@selector(tetherSwAction:) forControlEvents:UIControlEventValueChanged];
[cell.contentView addSubview:tetherSw];
[tetherSw release];
}
// Setup for each cell
cell.textLabel.text = @"Tether";
NSNumber *tetherState = [[mobIntDict objectForKey:@"State"] intValue];
NSNumber *currValState = [[NSNumber numberWithInt:1023] intValue];
UISwitch *tetherSw = (UISwitch *)[cell.contentView viewWithTag: kDefaultSwTag];
tetherSw.on = (tetherState == currValState);
// Return
return cell;
}
См. Документы для dequeueReusableCellWithIdentifier для получения дополнительной информации о снятии очереди.
Кроме того, убедитесь, что нет прозрачности ни в одном из подпредставлений вашей ячейки. Это вызывает много отставаний. Убедитесь, что на всех надписях или добавленных вами объектах установлен opaque = YES
и задан цвет фона.