UITableView是我们项目中经常用到的组件,IOS给我们提供的UITableView的功能很强大,使用也很方便。在使用过程中经常会用到dequeueReusableCellWithIdentifier来重用UITableViewCell,以达到节省内存的目的。但是这种重用机制,当数据超出一屏时候,往往会导致数据重影。下面提供几种解决重影的方法:
1.最简单也是最直接的方法,不使用重用机制:
由于问题是由cell的重用造成的,我们可以将dequeueReusableCellWithIdentifier替换为cellForRowAtIndexPath然后将indexPath作为参数传递;这样避免使用重用机制,自然问题也可以得到解决。只是会耗费内存多一点。
2.使用不同的重用标识:
由于是重用机制造成的,我们可以让重用的reuseIdentifier不同,这样就间接的避免了重用机制。即在使用dequeueReusableCellWithIdentifier方法的时候reuseIdentifier设置成不同。
3.在重用的时候清除掉之前cell中的所有的UIView:
在UITableViewCell中,我们自己写的view什么的全是加到cell.contentView这个UIView中的。因此可以在重用的cell中移除cell.contentView的所有的子view,然后在做相应处理,代码如下:
if(cell==nil) {
cell=[[WasherTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
}else{
NSArray *subViews=[cell.contentView subviews];
for(UIView *view in subViews){
[view removeFromSuperview];
}
}