前几天改同事的代码
摘要其部分代码:
- (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是否一样,关键在于其中的控件种类和数目的差异