reloadData时UITableViewHeaderFooterView与UITableViewCell在重用方面的区别

UITableViewHeaderFooterView与UITableViewCell在滑动屏幕时都可以根据标志进行重用,而在不滑动而只进行reloadData等刷新数据操作时,两者有不同表现:
1、UITableViewHeaderFooterView将不能根据标志重用(即系统不会将其放入重用缓冲区),会创建新的视图代替旧的。
2、UITableViewCell能根据标志重用

区别两者时,可以在快速创建对象的类方法中写:

// UITableViewHeaderFooterView快速创建
static NSString *identifier = @"headerView";
UITableViewHeaderFooterView *headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:identifier];
if (nil == headerView) {
    NSLog(@"headerView YES");
    headerView = [[UITableViewHeaderFooterView alloc] initWithReuseIdentifier:identifier];
} else {
    NSLog(@"headerView NO");
}

return headerView;
// UITableViewCell快速创建
static NSString *identifier = @"cellView";
UITableViewCell *cellView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:identifier];
if (nil == cellView) {
    NSLog(@"cellView YES");
    cellView = [[UITableViewCell alloc] initWithReuseIdentifier:identifier];
} else {
    NSLog(@"cellView NO");
}

return cellView;

在执行reloadData并且无滑屏操作时,代码块1会一直打“headerView YES”,也就是没有重用;代码块2会出现“cellView NO”,也就是进行了重用。

在进行滑屏操作时,代码块1和代码块2都会出现“cellView NO”。

所以在自定义UITableViewHeaderFooterView首尾视图时,要注意刷新数据时对视图的处理。

你可能感兴趣的:(reloadData时UITableViewHeaderFooterView与UITableViewCell在重用方面的区别)