UITableViewCell的重用机制特别的巧妙,至今学习了一番,才知道自己以前学习的是多么的肤浅. 温习一遍之后,又学习到了不少的知识. UITableView 里面有两个结构,一个是NSMutableArray可变数组类型的显示当前的visiableCells,该数组保存的是当前iPhone屏幕当前显示的cells,一个是NSMutableArray可变数组类型的可重用的resuableTableCells.,这个数组里面保存的是可重用的cells.
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *CellIdentifier = @"Cell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
- if (!cell) {
- cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
- }
- return cell;
- }
- cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 通过alloc来创建cell.重用机制大大的减少了内存的开销,并不是说1000条数据我们就要创建1000个cell,那样太浪费资源. iPhone屏幕默认会显示一屛的cell.
第一:这时候倘若显示10个cell,都是通过alloc出来的,当我们创建好cell之后并指定同样的重用标识符. 10个cell就会被全部的加入到当前显示的visiableCells数组中,此时可重用的resuableTableCells还是为nil;
第二步:向上滑动屏幕,当cell1完全的移出屏幕,cell11(也是alloc出来)完全显示出来的时候. cell11就会加入到visiableCells,当cell1移出visiableCells后,cell1就会加入到resuableTableCells数组中.
第三步:因为resuableTableCells里面已经有值了,所以之后显示的新cell,就会调用cellForRowAtIndexPath,这时就会返回cell1.cell1加入到visiableCells,cell1移出resuableTableCells,cell2移出visiableCells,cell2加入到热塑ableTableCells.实现cell的重用.