如何优化tableView

栏目: IOS · 发布时间: 5年前

内容简介:之前问到如何优化复杂

之前问到如何优化复杂 UITableViewCell 卡顿的问题, 有位大佬发了下面的一段文字, 在此记录一下

  • 1. cell 的行高不是固定值,需要计算,则要尽可能缓存行高值,避免重复计算行高。因为 heightForRowAtIndexPath: 是调用最频繁的方法。

  • 2.滑动时按需加载,这个在大量图片展示,网络加载的时候很管用!( SDWebImage 已经实现异 步加载,配合这条性能杠杠的)。

  • 3.正确使用 reuseIdentifier 来重用 Cells

  • 4.尽量少用或不用透明图层

  • 5.如果 Cell 内现实的内容来自 web ,使用异步加载,缓存请求结果

  • 6.减少 subviews 的数量

  • 7.在 heightForRowAtIndexPath: 中尽量不使用 cellForRowAtIndexPath: ,如果你需要用到它, 只用一次然后缓存结果

  • 8.所有的子视图都预先创建,如果不需要显示可以设置 hidden ,尽量少动态给 Cell 添加 View

  • 9.颜色不要使用 alph

  • 10.栅格化

  • 11. cellsubViews 的各级 opaque 值要设成 YES,尽量不要包含透明的子 View opaque 用于辅助绘图系统,表示 UIView 是否透明。在不透明的情况下,渲染视图时需要快速 地渲染,以提 高性能。渲染最慢的操作之一是混合 (blending )。提 高性能的方法是减少混合操 作的次数,其实就是 GPU 的不合理使用,这是硬件来完成的(混合操作由 GPU 来执行,因为这 个硬件就是用来做混合操作的,当然不只是混合)。 优化混合操作的关键点是在平衡 CPUGPU 的负载。还有就是 celllayershouldRasterize 要设成 YES

  • 12. cell 异步加载图片以及缓存

  • 13.异步绘制

    • (1)在绘制字符串时,尽可能使用 drawAtPoint: withFont: ,而不要使用更复杂的 drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode ; 如果要绘制过长的字符串,建议自己先截 断,然后使用 drawAtPoint: withFont: 方法绘制。

    • (2)在绘制图片时,尽量使用 drawAtPoint ,而不要使用 drawInRectdrawInRect 如果在绘 制过程中对图片进行放缩,会特别消耗 CPU

    • (3)其实,最快的绘制就是你不要做任何绘制。有时通过 UIGraphicsBeginImageContextWithOptions() 或者 CGBitmapContextCeate() 创建位图会显 得更有意义,从位图上面抓取图像,并设置为 CALayer 的内容。 如果你必须实现 -drawRect: ,并且你必须绘制大量的东西,这将占用时间。

    • (4)如果绘制 cell 过程中,需要下载 cell 中的图片,建议在绘制 cell 一段时间后再开启图 片下载任务。譬如先画一个默认图片,然后在 0.5S 后开始下载本 cell 的图片。

    • (5)即使下载 cell 图片是在子线程中进行,在绘制 cell 过程中,也不能开启过多的子线程。 最好只有一个下载图片的子线程在活动。否则也会影响 UITableViewCell 的绘制,因而影响了 UITableViewCell 的滑动速度。(建议结合使用 NSOpeartionNSOperationQueue 来下载图片, 如果想尽可能找的下载图片,可以把 [self.queuesetMaxConcurrentOperationCount:4]; )

    • (6)最好自己写一个 cache ,用来缓存 UITableView 中的 UITableViewCell ,这样在整个 UITableView 的生命周期里,一个 cell 只需绘制一次,并且如果发生内存不足,也可以有效的 释放掉缓存的 cell

  • 14.不要将 tableview 的背景颜色设置成一个图片。这回严重影响 UITableView 的滑动速度。在 限时免费搜索里,我曾经翻过一个错误: self.tableView_.backgroundColor = [UIColorcolorWithPatternImage:[UIImageimageNamed:@"background.png"]]; 通过这种方式 设置 UITableView 的背景颜色会严重影响 UTIableView 的滑动流畅性。修改成 self.tableView_.backgroundColor = [UIColor clearColor]; 之后, fps43 上升到 60 左右。 滑动比较流畅。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

千夫所指

千夫所指

乔恩·罗森 / 王岑卉 / 九州出版社 / 2016-10-1 / CNY 42.80

编辑推荐: 《乌合之众》是为了跪舔权贵?《普通心理学》实验存在重大漏洞?《引爆点》的理论都是瞎掰的?社交网络时代《1984》预言的“老大哥”是否已经变成事实? 《纽约时报》年度十佳书 《GQ》杂志年度十佳书 《卫报》年度十佳书 《泰晤士报》年度十佳书 《经济学人》年度重推! 黑天鹅年度重点图书! 《乌合之众》是为了迎合权贵?《普通心理学》实验存在重大......一起来看看 《千夫所指》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具