Here is the CellForRowAtIndexPath method of UITableViewDataSource protocol. I saw that code on a website.
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *TableIdentifier = @"SimpleTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TableIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableIdentifier];
}
cell.textLabel.text = [playersReady objectAtIndex:indexPath.row];
return cell;
}
My questions are:
-
Why when here defined
cellwrote= [tableView dequeueReusableCellWithIdentifier:TableIdentifier];? What that means? If I commented that code everything going OK. For what that code? Hmmm… -
How
cellinifstatement can be equals tonilifcellequals toTableIdentifier(SimpleTableItem)? For what wrote that code? -
Why
TableIdentifierequals to SimpleTableItem? For What?
An iPhone doesn’t have a lot of memory. But even on modern computers you wouldn’t want to initialize a new cell for every cell in your table. That’s just wasting memory. So instead Apple came up with this idea of reusable cells. You only have to initialize a few cells that fill your screen (table view). Then, when the user scrolls down some new cells will appear at the bottom of the screen, but at the same time other cells will disappear at the top of the screen. So you can simply take those cells and reuse them.
Luckily UITableView manages this for you. All you have to do when you need to setup a new cell in that method is ask the table view, if it has any cells available that can be reused. If there are reusable cells, dequeueReusableCellWithIdentifier: will return one of them. But if there are non available yet (typically when you first fill up your table view with the initial cells) it will return nil. So you have to test if cell is nil and create a new cell from scratch if that’s the case.
On iOS 6.0 there is a new method
dequeueReusableCellWithIdentifier:forIndexPath:that always returns a valid cell (it creates the cell for you if there is no reusable cell yet).