UITableView学习总结2(性能优化)
文章图片
UITableView学习总结 UITableView性能优化
IOS默认会使用懒加载的方式创建cell,但是如果数据量大的话,会抢占较多的内存,尤其是返回之前的数据,IOS是默认重新请求的。
- 个人建议,如果数据量不是很大的话,就用上面的方式就可以了,直接用模型装起来,用的时候直接拿,比较方便。
- 如果数据量大,再通过通过缓存池的方式来创建
- 顾名思义,就是放缓存的地方,你加载过的数据,都放在这里
- 缓存池的好处也是明显的,就是节约内存,这也是我们最最需要优化的地方。
- 话不多说,开始上代码。
其他的仍然不变,关键代码还是在cell中
/** 一般写法 */
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
//覆盖数据
Hero *hero = self.heroes[indexPath.row];
cell.textLabel.text = hero.name;
cell.imageView.image = [UIImage imageNamed:hero.icon];
cell.detailTextLabel.text = hero.intro;
/** 性能优化的写法 *///定义标识符
static NSString *ID = @"hero";
//缓存池查找数据
UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:ID];
//判空,如果没有就根据id初始化
if(cell == nil){
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
//覆盖数据
Hero *hero = self.heroes[indexPath.row];
cell.textLabel.text = hero.name;
cell.imageView.image = [UIImage imageNamed:hero.icon];
cell.detailTextLabel.text = hero.intro;
/**
* 注册的写法
* 可节省判空操作
*///定义标识符
NSString *ID = @"hero";
- (void)viewDidLoad {
[super viewDidLoad];
//注册标识符对应的cell类型
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
}
如此,整体性能便提升了。
最后,还有个更简单的用法:
StoryBorad方式
*StoryBorad中,可以直接设置identifier*
在storyborad的属性检查选项中,可以直接设置identifier。
【UITableView学习总结2(性能优化)】代码嘛,能省则省!
步骤
- 在storyborad中设置cell的标识
- 在代码中利用设置的标识读取cell
- cell里面还有个View,是contentView,如果要添家内容的话,IOS官方的建议是:添加到ContentView中
- 如果你在storyBorad中添加的话,系统会默认添加到contentView中
- storyBorad中也可以在添加多个cell
推荐阅读
- python合集|【Pygame实战】再次祭出舍不得分享的学习小技巧,用游戏玩出英文能力(O基础也能轻松get)
- 深度学习|Python21天学习挑战赛Day(11)·爬虫入门知识(应用)
- react学习|react学习—边界错误
- 深度学习|yolov5之魔化修改
- 机器学习|机器学习之聚类算法②——DBSCAN
- 机器学习|机器学习-DBSCAN聚类算法
- pytorch|【pytorch笔记】(五)自定义损失函数、学习率衰减、模型微调
- 如何高效学习
- W1周总结0101-0106沙沙
- #拆书学习法训练营#片段|#拆书学习法训练营#片段 一( 选自《坚持,一种可以养成的习惯》---王晓燕 重新加工第一课便签)