关于cell重用遇到的bug

前几天改同事的代码

摘要其部分代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellString];
    
    cell.textLabel.text = _leftTitles[indexPath.row];
    cell.textLabel.font = fontSize_15;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
    StayConfirm *model = self.datas[0];
    if (model && 0 == indexPath.row) {
       //内容省略
    }else if (1 == indexPath.row) {
      //内容省略
    }else if (2 == indexPath.row) {
        //内容省略
    }else if (3 == indexPath.row) {
       //内容省略
    }else if (4 == indexPath.row) {
       //内容省略
    }
    return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (3 == indexPath.row) {
        if (_adressIsHide == YES) {
            return 80.0f;
        }else {
            return 78.0f;
        }
    }else if (4 == indexPath.row) {
        return 80.0f;
    }
    return 44.0f;
}

那么问题来了,该代码当时想快,把所以的什么懒加载啊,UI布局啊,逻辑处理全都写到cellForRow...里面

咋一看,哎,挺紧凑的,再一看,特么的头疼,

这样写,第一次开发是能缩短一点点时间,但是后期不好维护,

这些就不说了,

不过有一个很致命的问题是,该代码里面的cell基本上每一个都不同,但是 cell的ID都是一样的,当拖动tableView刷新cell的时候,因为cell的ID都一样的话,重用cell时是随机的,假如旧cell里面的对象没有释放完的话,新cell就有可能重用到旧cell的东西,造成布局上的混乱,

解决的方法

既然如此,那么就每个cell都给一个不同的ID,确保不重用到其他差异太大的cell咯,不过这样的话,还不如直接整个view。 add到scrollView上省事

ps:cell是否一样,关键在于其中的控件种类和数目的差异

你可能感兴趣的:(关于cell重用遇到的bug)