我创建了一个 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 上面
求大神解答......
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复用的机制下会出现重叠的现像!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。