XIB自定义Cell重用问题

static NSString * Identifier = @"pastRecordsCell";
    BOOL nibsRegistered = NO;
    if (!nibsRegistered) {
        UINib * nib = [UINib nibWithNibName:NSStringFromClass([ZSPastRecordsCell class]) bundle:nil];
        [tableView registerNib:nib forCellReuseIdentifier:Identifier];
        nibsRegistered = YES;
    }
    ZSPastRecordsCell * pastRecordsCell = (ZSPastRecordsCell *)[tableView dequeueReusableCellWithIdentifier:Identifier];
    pastRecordsCell.selectionStyle = UITableViewCellSelectionStyleNone;
    [pastRecordsCell configPastRecordsCell:self.dataArray[indexPath.row]];
    return pastRecordsCell;


除此之外,还需在XIB文件中设置与代码中一样的Identifier。

注意:UINib是iOS4以后出来的类,与MAC上的NSNib类相似。就是对频繁使用的NIB文件的加载。当第一次从硬盘加载NIB是,它在内容中缓存NIB文件对象,之后加载的XIB文件就会从内存中拷贝出来,从而避免了较慢的硬盘访问。使用UINib最明显的地方就是在需要每次创建新Cell时从NIB文件中加载Cell的UITableViewController中。UINib的优势就是在不用大量修改代码的情况下获得性能的改进。apple曾宣称可以在加载UINib文件时提供2倍速度的提升。其原理简单讲就是,利用缓存机制避免频繁的从硬盘中加载XIB文件,这在大数据量的时候尤为突出。

另一种XIB代码重用的示例:

static NSString * Identifier = @"pastRecordsCell";
    ZSPastRecordsCell * cell ;
    cell = (ZSPastRecordsCell *)[tableView dequeueReusableCellWithIdentifier:Identifier];
    if (cell == nil) {
       cell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([ZSPastRecordsCell class]) owner:self options:nil] lastObject];
    }
    return cell;

这种加载方式在内存充足的情况下看起来是没问题,一旦内存吃紧的时候问题就暴露出来了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值