实现自定义的tableview和cell来更深的了解tableview,以及tableview的重用机制
复用池
//通过标识符从复用池获取cell
- (MyTableViewCell*) dequeueZRTalbeViewCellForIdentifiy:(NSString*)identifiy
{
MyTableViewCell* cell = Nil;
for (MyTableViewCell* each in _cacheCells) {
if ([each.identifiy isEqualToString:identifiy]) {
cell = each;
break;
}
}
if (cell) {
[_cacheCells removeObject:cell];
}
return cell;
}
//划出页面的cell放入复用池
- (void) cleanUnusedCellsWithDispalyRange:(NSRange)range
{
NSDictionary* dic = [_visibleCellsMap copy];
NSArray* keys = dic.allKeys;
for (NSNumber* rowIndex in keys) {
int row = [rowIndex intValue];
if (!NSLocationInRange(row, range)) {
MyTableViewCell* cell = [_visibleCellsMap objectForKey:rowIndex];
[_visibleCellsMap removeObjectForKey:rowIndex];
[self enqueueTableViewCell:cell];
}
}
}
//按顺序放入复用池
- (void)enqueueTableViewCell:(MyTableViewCell*)cell
{
if (cell) {
[cell prepareForReused];
[_cacheCells addObject:cell];
[cell removeFromSuperview];
}
}
代码:MyTableView