UITableView在代码中创建单元格 - 重新加载表返回旧单元格

时间:2010-08-10 06:31:38

标签: iphone uitableview

我不确定这是否是在代码中创建UITableViewCell的正确方法,但它完美无缺,直到我需要重新加载表作为其返回的旧单元格而不加载新内容。

- (UITableViewCell *)tableView:(UITableView *)tableViewData cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableViewData dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    if (indexPath.section == 0) {
        if ([marker objectForKey:@"imageUrl"]) {
            UIView *transparentBackground = [[UIView alloc] initWithFrame:CGRectZero];
            transparentBackground.backgroundColor = [UIColor clearColor];
            cell.backgroundView = transparentBackground;
            UIImageView *buildingView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 10, 100, 100)];
            buildingView.image = [self imageWithImage:[ImageManipulator makeRoundCornerImage:[self loadImage:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.qut.edu.au%@", [marker objectForKey:@"imageUrl"]]]] :9 :9]];
            [cell addSubview:buildingView];
        } else {
            UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 15)];
            label.text = @"test";
            [cell addSubview:label];
            [label release];
        }
    } else {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 15)];
        label.text = @"test";
        [cell addSubview:label];
        [label release];
    }
}
return cell;
}

基本上第3行返回的单元格不是nil(它是旧的),因此不会触发if语句并返回旧单元格。我每次都可以加载一个新的单元格,但这会导致加载和内存使用问题。

这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

它将是旧的,因为它只是(希望)创建一次,这是排队和出列可重用单元的点,以节省内存。您必须清除所需的任何属性。