360官方网站网址,义乌网站建设公司排名,网页制作培训要多少钱,安卓小程序开发教程一#xff1a;什么是TableView的优化以及为什么要优化 1#xff09;CPU#xff08;中央处理器#xff09;和GPU#xff08;图形处理器#xff09;#xff1a;CPU主要从事逻辑计算的一些工作#xff1b;GPU主要从事图形处理方面的工作。 2#xff09;CPU和GPU的共同点什么是TableView的优化以及为什么要优化 1CPU中央处理器和GPU图形处理器CPU主要从事逻辑计算的一些工作GPU主要从事图形处理方面的工作。 2CPU和GPU的共同点 都有自己的缓存体系都有自己的数字和逻辑运算单元都为了完成计算任务而设计。 3CPU和GPU的不同点 CPU的核少但是核内空间非常大能够处理复杂的逻辑。 GPU核多但是每个核的空间相对较小故而处理复杂逻辑的空间较少。 针对CPU和GPU的上述不同面对一个程序系统分配给CPU的往往是较为复杂的逻辑运算分配给GPU的通常是图片等控件的操作。 4上述不同而导致的结果 当程序员为CPU编程时倾向于用复杂的逻辑结构优化算法来减少计算任务的时间Latency。 为GPU编程-利用其能够处理海量数据的优势来提高总的数据的吞吐量来掩盖Latency。 5为什么优化 学术上平衡CPU和GPU在工作上的压力从而正确的使用CPU和GPU的资源使他们均匀的负载 这样子使得FPS保持在60帧左右最终使得用户体验更加美好。 非学术上掌握UITableView能够给面试加分。 二UITableView的工作原理 1tablewView代理方法的执行顺序。 UITableView返回多少组-----每组返回多少行cell---计算每个cell的高度----指定cellcell布局 2cell的复用。 原理当滚动列表时UITableView部分cell会移除Window 但是移除的cell并没有被立即释放 而是放到了一个叫做复用池的对象池中处于待定状态当有新的cell要出现在Window界面上时首先会从复用池中寻找是否有相同类型的cell如果有直接拿过用最直观的表现是新出现的cell有没有开辟新的内存空间如果没有创建一个新的类型的cell所以UITableView可能拥有多种类型的cell复用池也可能存储着多种类型的cell系统通过定义reuseIndentifer作为每个cell的唯一标示符来确定即将出现的cell复用何种类型的cell。 三UITableView的具体优化 1尽量使用cell的复用。 使用cell的复用可以减少内存的开销没有开辟新的空间也减少了一些计算量。 2对于不定高的cell 提前将每个cell的高度存入数组出现一个cell的时候直接从数组中拿出确切的高度即可不用临时计算cell的高度。 图文混排、评论 。 对于固定高的cell和不定高的cell同样适用。 3涉及网络请求加载数据在UITableView滑动结束的时候在进行加载数据渲染避免卡顿。 1、UITableView继承自UIScrollView继承了后者的方法。 //滑动结束的方法 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate //减速结束之后的方法 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 2、if(self.tableView.draggingNOself.tableView.deceleratingNO)在tableView必须实现的二个方法中(加载cell的方法中)将数据的渲染写在上述if语句中。 4对于tableView的自定义控件 尤其是UIImageView尽量减少使用圆角阴影等layer属性尽量减少使用alpha(透明度)来设置透明度(在项目开发中让UI设计师设计原图就是带圆角的图) 阴影圆角这些layer效果都是在GPU中完成的。 1、当多个视图重叠时GPU会进行合成渲染而渲染的最慢的操作就是混合因此当视图结构太过复杂就会大量消耗GPU的资源所以当一个空间本身是不透明注意设定alpha为1这样可以避免无用的alpha通道合成降低GPU的负载。 2、对控件设置cornerRadius后对其进行clip或mask操作时 会导致offscreenrendering这个也是在GPU中进行的 如果在滑动时 圆角对象太多 回到GPU的负载大增幅。 这时我们可以设置layer的shouldRasterize属性为YES可以将负载转移给CPU 更彻底的是直接使用带圆角的原图。 5尽量使用懒加载 又称为延迟加载 实际上是重写某个对象的getter方法 原理:程序一开始并不对它进行初始化 而是在用到他的时候 才为他开辟内存供它使用。 好处 1、不必将创建的对象的代码全部写在ViewDidLoad中代码可读性强。 2、每个控件的getter方法分别负责各自的实例化处理代码彼此之间独立性强 松耦合。 6减少返回给的cell里面的处理逻辑和处理时间。 驴妈妈为例各个UI控件整合到一起实际上只有一个控件。 7设置每个cell的opaque属性 ----面试亮点 opaque意思是不透明的 浑浊的 有YES和NO二个结果 alpha 透明度 如果控件本身不透明我们设置opaque为YES。 8分段加载数据 设置分页加载数据也就是上拉刷新和下拉加载。 转载于:https://www.cnblogs.com/fengmin/p/5497082.html