UITablew性能优化之栅格化

简介: UITablew性能优化之栅格化

在oc中提起性能优化,莫过于UITabliew.

在表格优化中性能优化有以下几点需要注意.

1.不能在cell的代理方法中动态创建子视图

2.cell中的图片要异步加载.

3.关于图片设置圆角,其实一直以来都有很大的争论.说到设置圆角究竟会不会导致性能优化呢?可是所谓的性能好右是什么呢?

那么就拿真机测试一番,因为真机CPU架构和模拟器的架构完全一样

在两帧之间,运算没有做完,就会造成卡顿,这个就是跳帧

刷新帧率(50-60)为优良

那么问题来了什么是一帧呢?

手机屏幕要想看到优良的画面从左到右,从上到下 都一个一个点画 这个就是完整的一帧图片

由于人体眼睛的特殊构造,视觉16帧会让人觉得是在动,24帧才会有优良的视觉体验.

为什么有些app会卡顿?会花?

因为摄像机的帧率是24帧.而电脑手机拥有良好的用户体验起码要50帧+

以及为什么有时候看电影车轮会倒着转?

因为倒时差,在车轮 的转速在某一个转速的时候跟摄像机的帧率吻合,给大闹皮层一种刺激)就会造成一种视觉差假象,看起来就像是倒着转.

说到这点,就不能不说栅格化

是一种美工(设计)的数语将cell中的所有内容,生成一张独立的图形

在屏幕滚动的时候,只显示图像

使用栅格化

Self.layer.shouldRasterize = yes

//栅格化必须要制定分辨率

Self.layer.resterizationScale =

[UIScreen mainScreen].scale

// 2.异步绘制 如果cell比较复杂,可以使用

Self.layer.drawAsynchronously = YES

如果要提高表格的性能,最关键的就是要减少计算量,就能保证每一帧都完成计算,从而达到流畅的效果,说白了也就是减少计算量

跳帧

就是在两帧之间运算还没有做完,就滚动到下一张图片去了,从而造成失帧

就会造成卡顿的感觉,用户的体验非常不好

好了,概念阐述清楚了,回到问题本身,如何优化?

1.行高一定要缓存.

2.不要动态创建子视图

所有的子视图都要预先创建好,不需要可以设置为hidden,或者高度为零

如果要说hidden和高度为零,那个性能更高,这个经过我测试在10000次测验几乎性能差距微微

3.所有的子视图都应该要加到contenView上

4.所有的子视图view都必须要指定背景颜色

为什么要指定背景颜色呢?因为没有指定颜色,让系统渲染的话,会大量消耗cpu的性能

5.所有的颜色都不要使用alpha (透明度)

什么不要使用透明度呢?还是因为图层渲染的问题.想象一下如果设置alpha透明度,系统就会为所有的图层一起渲染来渲染成透明度,这个需要cpu大量的计算,是非常耗性能的

6.cell栅格化

Layer.shouldRasterize =  true

Layer.rasterizationScale  =  UIScrren.mainreen().scale

7.异步绘制

Layer.drawsAsynchronously = true

8.尽量不要给图片设置圆角.如果非要绘制,那么久异步绘制.

其实最好是叫美工给一张原型图片

参考内容为:唐巧iOS高阶开发笔记

以上纯手码,如果你有更好的办法,请告诉我.如果那里有错,请告诉我!马上改.


相关文章
|
4月前
|
图形学 开发者
U3D开发进阶:精细调整Collider与优化碰撞检测性能
【7月更文第11天】在Unity 3D(简称U3D)开发过程中,精确控制Collider(碰撞器)的设置与合理利用Layer Collision Matrix(层级碰撞矩阵)对于提升游戏性能、优化物理模拟至关重要。本文将深入探讨这两项技术的应用,通过实际案例和代码示例,帮助开发者构建更加高效、流畅的游戏体验。
467 2
|
移动开发 Java
H5游戏性能优化总结
H5游戏性能优化总结
106 0
|
移动开发 前端开发 JavaScript
前端工程化的前端性能的性能优化方案的渲染层面优化之DOM优化
DOM 优化是一种非常重要的前端性能优化方案,因为它可以在不同的环境中提高网页的响应速度和可接受性。
86 0
|
机器学习/深度学习 编解码 人工智能
聊聊我做 NeRF-3D重建性能优化经历
聊聊我做 NeRF-3D重建性能优化经历
519 0
|
缓存 前端开发 JavaScript
前端性能中重要概念之性能优化方案
前端性能优化方案 在现代Web应用中,前端性能是非常重要的一环。在开发过程中,开发者需要寻找和实施各种前端性能优化方案,以提升应用的性能和用户体验。下面介绍一些常用的前端性能优化方案:
150 0
|
Web App开发 JavaScript 前端开发
当我们进行性能优化,我们在优化什么(LightHouse优化实操)
好的互联网产品不仅仅在功能上要高人一筹,在性能层面也需要出类拔萃,否则金玉其外败絮其中,页面是美轮美奂了,结果首屏半天加载不出来,难免让用户乘兴而来,败兴而归。 幸运的是,前端的性能优化有诸多有迹可循的理论和方法,其中相对权威的,无疑是LightHouse。
当我们进行性能优化,我们在优化什么(LightHouse优化实操)
|
前端开发 JavaScript API
渲染性能优化的全局视角,教你做的比别人好
遇到性能优化的问题,大抵都会从两个方向入手:行业标准优化手段、实际性能瓶颈问题。既能够从先进的模式、方法、套路吸收借鉴,又能够结合实际性能情况设计应对方案,已然是高质量工作的路径了,但是,路上还充斥着各种判断和选择,稍有不慎还是会泥足深陷,走上“要你命 3000 ”的道路。
渲染性能优化的全局视角,教你做的比别人好
|
缓存 算法 程序员
项目优化之性能优化(Unity3D)
如果一个游戏卡死了,它就没有乐趣。本文介绍了一些非常简单的性能改进,为了让玩家满意,每个Unity 开发者都应该知道这些改进。没有人期望你制作一个看起来像AAA+标题的游戏,但是它应该每秒有大量的帧。 注意:当我们谈论在FPS改进环境中,我们总是意味着计算起来很费时间(是什么使我们的CPU变得疯狂)。
|
JSON JavaScript 编译器
Qt编写地图综合应用5-自适应拉伸
一、前言 用过echart的人都会遇到一个问题,就算是代码中写了window.onresize = echart.resize,也只是横向自适应拉伸填充页面,垂直方向不会变化,除非指定高度才可以,这就比较郁闷了,为何echart本身不会自适应呢?按道理不应该啊,莫非实现起来很困难?好吧先不管这个了.
712 0
Qt编写地图综合应用5-自适应拉伸
|
机器学习/深度学习 缓存 数据处理
从功耗角度理解的性能优化
通常的性能优化都会以在规定时间范围内完成的逻辑运算为目标,但是有趣的是我们发现也许追求相同目标下的减少额外功耗是我们真正的方向,性能仅仅是产物而非目标,为此我们提出性能的公式: 信息有效密度/处理所需数据量需要的功耗,该公式表明我们需要提升信息有效密度,同时减少数据处理功耗,这样才能帮助我们最终提升性能。 提升有效信息密度: 文章 Deep learning has a size prob