美文网首页
Cell的循环利用

Cell的循环利用

作者: js_huh | 来源:发表于2020-06-29 16:37 被阅读0次

是什么?

  • Apple的cell循环利用:
    滑出屏幕的cell,并不会消失,它会放在缓冲池里面, 需要新的cell时,会去缓冲池里面去取。

有什么用?

  • 避免了频繁的创建和销毁,提高性能。

需注意什么?

  • 不要直接修改控件的显示。如下图所示:


  • 仅仅是"第一个cell"有加数量, 可是当滑出屏幕后,'人头马'、'拉图嘉利'的cell都变的有数量了。
  • 所以想要修改数据,需要通过,修改数据源 / 模型来达到修改控件的显示。
  • 什么是"直接修改控件的显示" ? 如上图,更改购买数量。
    countLabel 是购买数量的Label控件
    wine.count 是模型(wine)里面属性(购买数量)
    以下写法,就是"直接修改控件的显示"
    • self.countLabel.text = [NSString stringWithFormat:@"%d",self.countLabel.text.intValue +1];
  • 什么是"通过修改数据源 / 模型来达到修改控件的显示" ?
    setWine - 重写类型Wine 的 set 方法。
    它是用在VC里,作用是将数据源里面的数据,赋值给对应的cell子控件
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        WineCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        cell.wine = self.wineData[indexPath.row];  
        return cell;
    }
    
    • 这才是修改模型setWine,达到修改控件的显示
    -(void)setWine:(Wine *)wine{
      ....
      // 修改模型 - 设置控件的显示数据
      self.countLabel.text = [NSString stringWithFormat:@"%d",wine.count];
    }
    
    - (IBAction)plusClick:(id)sender {
      self.wine.count ++; // 修改模型
    }
    

为什么使用'模型来修改控件的显示',就不会有Cell的循环利用呢?

  • 其实这句话,说的不够严谨, Cell的循环利用其实还是存在得。
  • Cell-A滑出屏幕时,下面的Cell-B会引用Cell-A(Cell循环利用),但同时会调用setWine方法,
    此方法会重新给控件赋值self.countLabel.text = ...., 每次cell进入屏幕都会调用此方法 !
    看上去就好像没有Cell循环利用,其实是有得, 只是控件的值修改了! (这正是我需要得)

来自于哪里?

  • iOS-MJ-UI基础-大神班/day-11/04-购物车-加号减号点击处理

相关文章

网友评论

      本文标题:Cell的循环利用

      本文链接:https://www.haomeiwen.com/subject/qxxafktx.html