UITableViewCell重影问题

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];
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值