开发者社区> 问答> 正文

UITableView Cell 的复用的问题

我创建了一个 TableView, 自制定的 Cell, 但是有一个数据必须要到我重写的 setModel 里面获取,于是我在 setModel 里面 alloc, 就会发生上下滚动的时候无限alloc, 然后我在 tableViewCell 里面写了

    [cell removeFromSuperview]; 

    [cell.typeLabel removeFromSuperview]; 

    cell.typeLabel = nil; 

然而都没有用

这是Cell 里面的代码

  • (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

    self.backgroundColor = [UIColor colorWithRed:250/255.0f green:250/255.0f blue:248/255.0falpha:1]; 
    
    [self createCell]; 
    

    }

    return self;

}

  • (void)setModel:(QJYEventModel *)model {

    for (int i = 0; i < model.tag.count; i ++) {

    _typeLabel = [[UILabel alloc] initWithFrame:CGRectMake(40 * i + 10,CGRectGetMaxY(_nameLabel.frame) + 10, 30, 14)]; 
    
    _typeLabel.text = model.tag[i]; 
    
    _typeLabel.backgroundColor = [UIColor colorWithRed:106/255.0f green:202/255.0fblue:250/255.0f alpha:1]; 
    
    _typeLabel.textColor = [UIColor blackColor]; 
    
    _typeLabel.layer.masksToBounds = YES; 
    
    _typeLabel.layer.cornerRadius = 2.5; 
    
    _typeLabel.textColor = [UIColor whiteColor]; 
    
    _typeLabel.textAlignment = NSTextAlignmentCenter; 
    
    _typeLabel.font = [UIFont systemFontOfSize:12]; 
    
    [_canvas addSubview:_typeLabel]; 
    

    }
    }

_canvas 是一个空白 View, 加到了 self.contentView 上面

求大神解答......

展开
收起
杨冬芳 2016-06-27 12:37:06 2258 0
1 条回答
写回答
取消 提交回答
  • UITableView是ios开发中使用率极高的一个控件,就我个人来说,几乎我做的每一个View上都有她的身影。但是很长一段时间,我对她的理解都很肤浅。对我来说触动较大的两个东西,一个是前面提到的自定义UITableViewCell,再有就是今天要提的这个复用了。 所谓复用表面意思来理解就是重复利用了。大致的工作原理就是:UITableView属于lazy loading,也就是只加载会在界面上显示的部分。举个例子,比如说UITabeview的调试是460,咱们每个Cell的调试是230,这样的话,手机界面上最多就显示两个Cell,当你向上划动,第一个Cell一些离开界面,第三个Cell的一些出现在界面的时候会再创建第三个Cell。注意关键部分到了,再第二个Cell开始离开界面,第四个Cell出现的时候,这时候不会创建第四个Cell,而是直接复用的第一个Cell!也就是说无论你的UITableView里有十条或者三十条数据,只会创建三个Cell来展示这些数据!  总的来说,这种工作机制很合理,无论从CPU和内存的角度考虑都很节省资源,但是这里有一个问题就是:这种机制是用来展示结构一样的数据的!很多时候我们总要实现动态加载,总要有一个Cell,与其它的Cell不同,用来显示“正在加载中”或者“加载更多”之类的东西。这时候在Cell复用的机制下会出现重叠的现像!
    
    2019-09-23 19:27:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载