为什么要缓存高度?
因为当tableView滚动时会不停的回调- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;这个代理方法,当cell的高度需自适应内容时,就意味着每次回调这个方法时都要计算高度,而计算是要花时间了,在用户体验上的体现就是卡顿。为了避免重复且无意义的计算cell高度,缓存高度就显得尤为重要了。
怎样缓存?
缓存高度需要一个可变数组,每当回调- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;这个方法时,我们先去这个数组里去取,如果有,就直接拿出来,如果没有,就计算高度,并且放进数组。
代码讲解
这是我们用来装缓存高度的可变数组
/** 缓存cell高度的数组 */
@property(nonatomic,strong)NSMutableArray*heightArray;
- (NSMutableArray*)heightArray{
if(_heightArray ==nil) {
_heightArray = [NSMutableArrayarray];
}
return_heightArray;
}
刷新tableView时记得清空高度缓存数组。
总结
总的来说缓存cell高度还是比较简单的,只需在原来的基础上多加一个可变数组即可,逻辑也不复杂。不过,其对性能的优化还是不容小觑的,尤其是cell内容复杂且需高度自适应内容时。强烈建议人人get这项技术,即使是入门级开发者。
链接:http://www.jianshu.com/p/25e2f99a08cc
网友评论