美文网首页
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