It should be a problem of memory management.
Consider this statement:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellTableIdentifier];
According to the Cocoa memory management rule, this is not an alloc
/new
/copy
method, i.e. you don't own the cell
, so you should not -release
it after finish using it. However, the next statement (assume cell != nil
):
return [cell autorelease];
will make the cell
be released (some time later), causing a double-release of the cell (some time later). Therefore you should simply return cell;
.
Now what if cell == nil
? Inside the if
branch, you wrote
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellTableIdentifier];
Since the cell
is created with alloc
, you are responsible to -release
it. But since you're going to return it to others, you have to relinquish the ownership while avoid it not being deallocated immediately. This is where -autorelease
is used, to temporarily transfer the ownership to an "autorelease pool" so other code can have a chance to retake the ownership (-retain
it) before it got flushed into voidness.
In the other words you should replace this statement with cell = [[[...] autorelease];
.
Similarly, you should -release
the label
because it is -alloc
-ed and you are no longer own it. However, you don't need to -autorelease
because you are sure there is already another owner (cell.contentView
).
To summarize, you should rewrite the code as:
static NSString *CellTableIdentifier = @"CellTableIdentifier ";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellTableIdentifier];
if (cell == nil)
{
cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellTableIdentifier] autorelease];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 5, 70, 15)];
label.text=@"Name:";
[cell.contentView addSubview:label];
[label release];
}
return cell;
BTW, you can use UITableViewCellStyleValue2
(like the address book) to avoid messing with the view hierarchy.