你的位置:首页 > 操作系统

[操作系统]UITableView中的cell的优化


 1.cell的重用

   所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据Identifier从缓存中获取cell,如此的循环往复,这样只会创建固定的cell对象,节省了内存。

下面是重用cell的代码:

 //1. 定义重用的标识

   static  NSString *reuseId = @"tg";

    //2,从缓存中获取重用cell

    CZTgCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];

    

    //3.判断如果cell等于nil 就创建cell

    if (cell == nil) {

        cell = [[[NSBundle mainBundle]loadNibNamed:@"CZTgCell" owner:nil options:nil]lastObject];

    }

    return cell; 

  2.为什么定义重用标识符的时候,定义为静态的

    cell调用的次数相当多,会创建多次标识符对象,而静态的变量只会创建一次开辟一块内存,节省了内存空间。

  3.cell的init方法的注意点

   重写init方法,添加子控件时,在这个方法中,需要对控件的一次性属性进行设置,所谓的一次性属性,指的是像文字的大小啊文字的颜色啊之类的固定值,因为这些属性和数据没有关系,提高了性能。

    注意:设置控件的frame,直接在init方法中headView的frame没有效果,所以要在layoutSubviews方法中设置各个子控件的frame,这个方法必须重写父类的方法。

 4.cell重用的时候,不光要覆盖数据,也应该要覆盖对应的状态,否则重用的时候会把状态和数据都会重用

  重用解决:在重写模型的set方法,覆盖数据和状态。

5.cell的行高的问题

  cell创建之前多次计算行高,如果行高是固定的,那尽量少用下面的代理方法,因为它会多次调用并计算行高,可以用tableView的rowHeight属性

  -(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;