iPhone在UITableViewController中的奇怪行为
问题描述:
我有一个UIView(称为:消息),与2 UILabel(标签,dataLabel)和1 UIButton(iconButton)的单元格。iPhone在UITableViewController中的奇怪行为
如果我释放dataLabel和iconButton,我会在运行时收到错误。如果我释放其他人没有发生问题。
你能帮我吗?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UIImageView *balloonView;
UILabel *label;
UIButton *iconButton;
UILabel *dataLabel;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellID"] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
UIView *message = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height)];
message.tag = 1;
dataLabel = [[UILabel alloc] initWithFrame:CGRectZero];
dataLabel.backgroundColor = [UIColor clearColor];
dataLabel.textColor = [UIColor darkGrayColor];
dataLabel.tag = 2;
dataLabel.numberOfLines = 0;
dataLabel.lineBreakMode = UILineBreakModeWordWrap;
dataLabel.font = [UIFont systemFontOfSize:11.0];
dataLabel.textAlignment = UITextAlignmentCenter;
dataLabel.opaque = YES;
balloonView = [[UIImageView alloc] initWithFrame:CGRectZero];
balloonView.tag = 3;
balloonView.image = nil;
label = [[UILabel alloc] initWithFrame:CGRectZero];
label.backgroundColor = [UIColor clearColor];
label.tag = 4;
label.numberOfLines = 0;
label.lineBreakMode = UILineBreakModeWordWrap;
label.font = [UIFont systemFontOfSize:14.0];
label.opaque = YES;
iconButton = [UIButton buttonWithType:UIButtonTypeCustom];
iconButton.tag = 5;
[message addSubview:dataLabel];
[message addSubview:balloonView];
[message addSubview:label];
[message addSubview:iconButton];
[cell.contentView addSubview:message];
[balloonView release];
[label release];
[message release];
}
else {
dataLabel = (UILabel *)[[cell.contentView viewWithTag:0] viewWithTag:2];
balloonView = (UIImageView *)[[cell.contentView viewWithTag:0] viewWithTag:3];
label = (UILabel *)[[cell.contentView viewWithTag:0] viewWithTag:4];
iconButton = (UIButton *)[[cell.contentView viewWithTag:0] viewWithTag:5];
}
dataLabel.frame = CGRectMake(0,0,cell.frame.size.width,20);
dataLabel.text = [NSString stringWithFormat:[[messages objectAtIndex:indexPath.row] valueForKey:DATE_TAG_NAME]];
UIImage *balloon;
[...]
balloonView.image = balloon;
return cell;}
谢谢!
答
你不需要释放iconButton作为它的autorelease对象。
只有在分配对象或保留对象时,才应释放对象。
我在发布dataLabel时看不到任何问题。尝试发布dataLabel并跳过释放iconButton,看看会发生什么。
很可能它只是由于释放iconButton,你不应该这样做,因为它是一个autorelease对象。