关于tableView的性能优化

来源:互联网 发布:游戏bgm知乎 编辑:程序博客网 时间:2024/05/06 06:37

总结一个ios中的性能优化:

1.tableView中的重用机制,尽量重用


2.cell内部有图片:此时需要异步加载图片,防止卡顿(此时的SDWebImage的每个cell中都创建一个子线程吗?)但是内部开启的线程过多也会影响主线程的性能
2.1.解决办法,在scrollerView的代理方法中,didEndDragging,didEndDeceleratiing方法中,才开始异步加载,其它时刻不进行加载
2.2.didEndDragging,didEndDeceleratiing方法中实现方法:获取屏幕上显示出来的cellindexPath数组,然后通过遍历indexPath的数组,在数据源中,如果已经加载了,就不需要再异步加载,反之进行异步加载,然后再cellForRow方法中也进行一次判断:当self.tableView.dragging == NO && self.tableView.decelerating == NO 的时候执行异步加载图片的方法
2.3.didReceiveMemoryWarning方法中释放掉所有的子线程,防止在内存警告的时候被系统强制关闭
2.4.dealloc方法中,使所有的delegatenil


3.像素混合问题引起的性能问题:我用label显示的时候出现像素混合的问题,我有着一种追求代码优化的洁癖,我在用Instruments里的Core AnimationColor Blended Layers里面检测时发现label出现了像素混合的现象(出现的label状况为红色),然后我设置了labelmasksToBoundsyes就解决了问题,关于这个,美工在企鹅图片的时候也最好不要切除透明的区域,这样在显示图片的时候也会出现像素混合


4.离屏渲染,可以结合instrument结合使用

4.1.tableView中展示多张需要切圆形的图片,此时不要使用setCornerRadius的方法,这样耗损性能,我弄了一个UIImage的分类,用Core Graphics绘制圆角,然后返回图片,在SDWebImage处理我的分类返回的图片,并进行缓存。  检测结果:我用InstrumentsCore Animation查看性能Color Offscreen-Rendered Yellow没有发现离屏现象,这样就解决了


5.UIImage:本地图片加载方式本地图片加载常用方法有两种:
        5.1. [UIImage imageNamed:@"xx.png"] 图片多次使用时使用,需要使用此方式加入缓存
        5.2. [[UIImage alloc] initWithContentsOfFile :@"xx.png"] 图片不常使用时,不使用缓存


6.如果控件是透明的,需要设置opaqueYES。参考:http://blog.csdn.net/songchunmin_/article/details/51125992


7.避免对象创建时过多消耗资源例如:日期处理,将保持日期对象全局唯一


8.性能检测静态分析APP:菜单-Product-Analyze可以定位未使用的变量,内存泄漏分析APP每个操作占用时间: Instruments-Time profiler动态分析内存泄漏:Instruments-Leaks


0 0
原创粉丝点击