Hi, it's worth you getting to grips with iPhone memory management a little more.
Basically, an [alloc] and a [copy] both increase your retain count by one. So the following line:
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
increments the retain count on your new cell object, from zero to one.
You could then manually decrease the retain count back to zero when you were done with it, by typing the following:
[cell release];
instead of the autorelease. This would reduce its retain count to zero, at which point the iPhone system will automatically dealloc the memory for this object. [Note that you never call [cell dealloc] directly - rather, dealloc automatically happens when the retain count goes back to zero.]
However, you don't easily know when that cell will no longer be required. So instead you use [autorelease].
Without going into the depths of how autorelease works, effectively it gathers all objects that are no longer referenced and releases them (and therefore deallocs them) at the start of the next run cycle.
As long as you have a reference to the cell object it will not be autoreleased. The moment you have no reference to it, it will be added to the autorelease pool and will be dealloc'd in due course.
Sorry it's a bit involved - does that help??!