是什么?
-
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-购物车-加号减号点击处理
网友评论