美文网首页
iOS-tableView的性能优化

iOS-tableView的性能优化

作者: Simple_Code | 来源:发表于2017-08-04 09:45 被阅读69次

1.tableViewCell复用机制

简单介绍:
假设我们的tableview中有1000个cell,窗口只容得下前5个,每个cell都是一样的,复用id也一样。从初始位置开始慢镜头,把cell前上滑动一点点,此时第一个cell的一部分消失了,第六个cell露出了一部分,这时第一个cell并没有进入到复用池,池子是空的,第六个cell自然也就不能在复用池中找到可复用的cell,第6个cell执行了如下代码:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cacheCellId];  
if (!cell) {  
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];  
} 

第7个以后可以从缓存池里面找到了,这样实际我们只创建了6个cell

2.缓存cell高度

假设我们的tableview中有1000个cell,每当屏幕出现新的cell(无论是新创建的还是从缓存中取得)都会执行以下方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"%s", __FUNCTION__);
    UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:@"UITableViewCell" forIndexPath:indexPath];
    cell.textLabel.text = [NSString stringWithFormat:@"%ld-%@",(long)indexPath.row,_dataArray[indexPath.row]]
    ;
    cell.backgroundColor = [UIColor yellowColor];
    return cell;
}
#pragma mark- UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"%s%@", __FUNCTION__,indexPath);
    return 50;
}

如果我们不缓存cell高度、也就会说每次有新的cell的出现我们就需要计算cell高度、影响性能

3.滑动时按需加载(这个在大量图片展示,网络加载的时候很管用

具体可以参考 VVeboTableViewDemo

4.尽可能重用开销比较大的对象。

如NSDateFormatter 和 NSCalendar等对象初始化非常慢,我们可以把它加入类的属性当中,或者创建单例来使用

5.离屏渲染会产生性能问题

iOS 9.0 之前UIimageView跟UIButton设置圆角都会触发离屏渲染。
iOS 9.0 之后UIButton设置圆角会触发离屏渲染,而UIImageView里png图片设置圆角不会触发离屏渲染了,如果设置其他阴影效果之类的还是会触发离屏渲染的。
这可能是苹果也意识到离屏渲染会产生性能问题,所以能不产生离屏渲染的地方苹果也就不用离屏渲染了。
iOS设置圆角的四种方法

6.设计统一规格的Cell,善用hidden隐藏(显示)subviews

统一Cell的规格,不仅能减少设计不同Cell所需要代码量,更重要的是能提高Cell的重用率,提升TableView整体性能

7.UITableViewCell 上的子View的opaque属性设为YES。

其实默认也是不透明。UITableViewCell尽量不要包含透明的子View。

8.使用局部更新

如果只是更新某组的话,使用reloadSection进行局部更新

9.开启光栅化、缓存渲染、避免多次做颜色混合(blending)处理

cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;

10.文字图片可以直接drawInRect绘制;

相关文章

  • iOS-tableView的性能优化

    1.tableViewCell复用机制 简单介绍:假设我们的tableview中有1000个cell,窗口只容得下...

  • iOS-TableView性能优化方案

    卡顿原因:cell赋值内容时,会根据内容设置布局,也就可以知道cell的高度,若有1000行,就会调用1000次 ...

  • Awesome Extra

    性能优化 性能优化模式 常见性能优化策略的总结 Spark 性能优化指南——基础篇 Spark 性能优化指南——高...

  • Android性能优化 - 消除卡顿

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化 - 内存优化 性能分析工具 - Tra...

  • Android性能优化 - 内存优化

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - Trac...

  • 前端性能优化(中)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(上)...

  • 前端性能优化(下)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(中)...

  • 常用的后端性能优化六种方式:缓存化+服务化+异步化等

    性能优化专题 前端性能优化 数据库性能优化 jvm和多线程优化 架构层面优化 缓存性能优化 常用的后端性能优化六大...

  • webpack 性能优化

    webpack性能优化 开发环境性能优化 生产环境性能优化 开发环境性能优化 优化打包构建速度 优化调试功能 生产...

  • iOS-tableView性能优化/tableView滑动卡顿

    1.UITableViewCell重用机制? UITableView只会创建一屏幕(或者一屏幕多一点)的cell,...

网友评论

      本文标题:iOS-tableView的性能优化

      本文链接:https://www.haomeiwen.com/subject/jaqvlxtx.html