前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cell高度的缓存1——利用字典进行缓存

cell高度的缓存1——利用字典进行缓存

作者头像
用户1451823
发布2018-09-13 15:46:57
4900
发布2018-09-13 15:46:57
举报
文章被收录于专栏:DannyHoo的专栏DannyHoo的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337807

在iOS项目开发中会遇到这样一个问题:确定cell的高度。对于cell高度固定的页面来说这个很好办直接在heightForRowAtIndexPath方法中返回固定的一个数值就行。然而对于cell高度不固定的页面来说却需要我们开发人员计算出cell的高度。

笔者之前通常会会将计算cell高度的代码放在heightForRowAtIndexPath方法中,看代码:

  • (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

TopicModel * model = self.dataSourceindexPath.row;

cellHeight == 0.f

        cellHeight += 30;

NSString * text = model.text;

NSMutableDictionary * dic = NSMutableDictionary dictionary;

        dicNSFontAttributeName = UIFont systemFontOfSize:17;

CGRect textRect = text boundingRectWithSize:CGSizeMake(WIDTH-20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil;

        cellHeight += textRect.size.height;

        cellHeight += 30;

return cellHeight;

}

上面的代码虽然能计算出cell的高度实现想要的效果,可会有一个耗性能的问题:即使之前计算过某个cell的高度,在这个cell在此展示出来的时候还会再次调用heightForRowAtIndexPath这个方法,从而再次地计算这个cell的高度。这样就会进行多余的操作,造成资源的浪费。在这种情况下,我们应该将之前计算出的cell高度进行缓存,下次这些cell要再次展示的时候就从缓存中获取之前计算出的cell高度,而不用进行多余的计算操作。

我们利用字典对cell高度进行缓存,而且为了区分每个cell,我们将每个cell对应的模型的唯一标识description作为字典的key。代码:

  • (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

TopicModel * model = self.dataSourceindexPath.row;

CGFloat cellHeight = [self.cellHeightDicmodel.description floatValue];    // 从字典中取出cell的高度

if (cellHeight == 0.f) {    // 如果字典中没有存储cell的高度

        cellHeight += 30;

NSString * text = model.text;

NSMutableDictionary * dic = NSMutableDictionary dictionary;

        dicNSFontAttributeName = UIFont systemFontOfSize:17;

CGRect textRect = text boundingRectWithSize:CGSizeMake(WIDTH-20, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil;

        cellHeight += textRect.size.height;

        cellHeight += 30;

// 将cell的高度存储到字典中

        self.cellHeightDic setObject:@(cellHeight) forKey:model.description;

//        NSLog(@"%f", cellHeight);

    }

return cellHeight;

}

为了更完善些,我们还应该在下拉刷新tableview执行reloadData之后将存储cell高度的字典清空以防字典中的数据越来越多。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年11月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档