在使用第三方应用时,却经常遇到性能上的问题,普遍表现在滚动时比较卡,特别是cell中包含图片的情况时。
实际上针对性地优化一下就可以解决tableview滑动的时候卡顿的问题:
1.使用不透明的视图。不透明的视图可以提高渲染的速度。可以将cell及其子视图的opaque属性设置为yes(默认值)。
2.不要重复创建不必要的cell。uitable只需要一屏幕的uitablevcell对象即可。因此在cell不可见的时候,可以将其缓存起来,而在需要的时候继续使用它即可。注意:cell被重用的时候,需要调用setneedsdispalyinrect或者setneedsdisplay方法重绘cell。
3.减少动画效果的使用,最好不要使用。
4.减少视图的数目。cell包含了textlabel、detailtextlabel和imageview等view、而你还可以自定义一些视图放在它的contentview里,创建它会消耗较多的资源,。并且也影响渲染的性能。
5.cell包含图片、并且数目较多、使用自定义的cell速度会比默认的快很多。
6.不要做多余的绘制工作。在实现drawRect的时候,它的rect参数就是需要绘制的区域,这个区域之外的不需要进行绘制。
7.预渲染图像。
如果上诉几点做到之后,当新的图像出现的时候还是有点卡顿的现象,那么可以在图像上下文中画。导出UIimage对象,然后再绘制到屏幕。使用异步绘制
8.不要阻塞主线程。tableview在更新数据的时候,整个界面卡住不动,完全不响应用户请求。常见的是网络请求,等待时间长待数秒。
解决办法:使用多线程,让子线程去执行这些函数或者方法。
注意:当下载线程数超过2的时候,会显著影响主线程的性能。所以在不需要响应用户请求的时候,下载线程可以增加到5,不建议再增加了,以加快下载速度。如果用户正在交互,应该把线程数量控制在2个以内。
9.提前计算并缓存好高度,因为heightforrowatindexpath调用非常的频繁。
10.选择正确的数据结构:学会选择会业务场景最适合的数组结构是写出高效代码的基础。比如,数组:有序的一组值。使用索引来查询很快,使用值查询很慢,插入/删除很慢。字典:存储键值对,用键来查找比较快。集合:无序的一组值,用值来查找比较快,插入/删除很快。
11.gzip/zip压缩:当从服务器下载相关附件时,可以通过gzip/zip压缩后再下载,使得内存更小,下载速度更快。
如何为在tableview的cell中嵌套collectionview?
用自定义的继承于UItableviewcell的类,在initwithframe的构造方法中,初始化自定义继承自UIcollectionview的类。
网友评论