• iOS学习笔记(4) — UITableView的 重用机制


     iOS学习笔记(4) — UITableView的 重用机制

     

    UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的个数。比如,cell高度为90。那么480 / 90 = 5 + 1,也就是说最多有6个cell能显示在屏幕中。

      系统会创建1个cel池,无论tableview有多少行都只创建6个cell放在池中。当某行移出屏幕的时候,将这个cell放回在池中;当某行需要显示在屏幕中时,从池中取出一个cell。

     

      重用机制需要制定一个cellIdentifier(行标识)来区分所需要的不同种类的cell,如果是同一类型的cell只需要制定一个identifier。

      可以对cell进行操作,改变属性如文字、背景图片,但是不能改变其本身,不能把它转化成另一个类型的对象。如果有这个需要应该制定两个或多个cellIdentifier。

    -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString * aCellIdentifier = @"CELLIDENTIFIERl";
        CustomCell*ell=(CustomCell*)[tableView] dequeueReusableCellWithIdentifier:aCellIdentifier];
     
        if (cell == nil)
        {
                cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: aCellIdentifier] autorelease];   <br>  } <br>  cell.title = [NSString stringWithFormat:@”标题 %d”,indexPath.row]; <br>  return cell; <br>}

      代码分析:

      CustomCell继承自UITableCell。

      CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];它的文档说明如下:returns a reusable table-view cell object located by its identifier。它返回的是一个受identifier管理定位的可重用的tableViewCell,这里重点就在于“可重用”这3个字上。

      在这个例子中,if(cell == nil){}中的语句只执行了6次,前6次池里面没有cell取出的cell都是nil,6次之后从池里可以取出cell,条件不成立直接执行之后的语句。

      重用机制的好处是显而易见的,无论tableview有多少行都只创建屏幕能显示的行数。节省了内容。由于有缓存池实现了cell的重用,避免了反复的alloc、release。

      UITableView开发时可利用的优化点。

      1、所有cell通用的属性放在自定义cell里这样可以节省系统开销,如背景图片。

      2、如果cell只有少数几个种类,则用不同的cellIdentifier标识,避免反复操作cell的subview用内存换cpu。

      3、cell的种类不能太多,过多的cellIndentifier相当于废掉了UITableView的重用机制。

     
     
  • 相关阅读:
    LeetCode 1049. Last Stone Weight II
    LeetCode 56. Merge Intervals
    LeetCode 494. Target Sum
    LeetCode 763. Partition Labels
    LeetCode 343. Integer Break
    LeetCode 435. Nonoverlapping Intervals
    PHP71yum安装
    docker容器资源配额
    神经网络基本结构
    神经网络基础
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5851527.html
Copyright © 2020-2023  润新知