Вот проект xcode, который я только что задал, чтобы задать этот вопрос:
http://www.mediafire.com/?z26ufsfhby62br9
Откройте журнал и запустите его.Вы обнаружите, что он выводит display: x
и create: x
, где x - это число от 0 до 49 и соответствует ячейке с тем же номером.Он должен выводить только до 22, прежде чем выполнять прокрутку, поскольку Apple всегда хвастается, что их таблицы загружаются по мере необходимости.
В основном это показывает, что tableView:willDisplayCell:forRowAtIndexPath:
и tableView:cellForRowAtIndexPath:
запускаются для каждой ячейки в значительной степени, как только появляется табличное представление, почему это так?
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"create: %i", indexPath.row);
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
cell.textLabel.text = [NSString stringWithFormat:@"%i", indexPath.row];
return cell;
}
- (void) tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"display: %i", indexPath.row);
}
Почему названные выше методы называютсясразу после загрузки tableView (и перед каждой ячейкой)?Наверняка их следует вызывать только перед тем, как появится каждая ячейка?