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


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

      系统会创建1cel池,无论tableview有多少行都只创建6cell放在池中。当某行移出屏幕的时候,将这个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];   
      }
      cell.title = [NSString stringWithFormat:@”标题 %d”,indexPath.row];
      return cell;
    }

      代码分析:

      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都是nil6次之后从池里可以取出cell,条件不成立直接执行之后的语句。

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

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

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

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

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

  • 相关阅读:
    java开发_图片截取
    一位台湾软件工程师的心路历程
    WCF Basic(2)服务契约继承
    状态模式(State Pattern)
    .NET Remoting Basic(9)上下文(CallContext)
    访问者模式(Visitor Pattern)
    命令模式(Command Pattern)
    .NET Remoting Basic(10)创建不同宿主的客户端与服务器端
    责任链模式(Chain of Responsibility Pattern)
    消息队列(Message Queuing)
  • 原文地址:https://www.cnblogs.com/zy1987/p/3195739.html
Copyright © 2020-2023  润新知