总结一个ios中的性能优化: 1.tableView中的重用机制,尽量重用 2.cell内部有图片:此时需要异步加载图片,防止卡顿(此时的SDWebImage的每个cell中都创建一个子线程吗?)但是内部开启的线程过多也会影响主线程的性能 2.1.解决办法,在scrollerView的代理方法中,didEndDragging,didEndDeceleratiing方法中,才开始异步加载,其它时刻不进行加载 2.2.在didEndDragging,didEndDeceleratiing方法中实现方法:获取屏幕上显示出来的cell的indexPath数组,然后通过遍历indexPath的数组,在数据源中,如果已经加载了,就不需要再异步加载,反之进行异步加载,然后再cellForRow方法中也进行一次判断:当self.tableView.dragging == NO && self.tableView.decelerating == NO 的时候执行异步加载图片的方法 2.3.在didReceiveMemoryWarning方法中释放掉所有的子线程,防止在内存警告的时候被系统强制关闭 2.4.在dealloc方法中,使所有的delegate为nil 3.像素混合问题引起的性能问题:我用label显示的时候出现像素混合的问题,我有着一种追求代码优化的洁癖,我在用Instruments里的Core Animation的Color Blended Layers里面检测时发现label出现了像素混合的现象(出现的label状况为红色),然后我设置了label的masksToBounds为yes就解决了问题,关于这个,美工在企鹅图片的时候也最好不要切除透明的区域,这样在显示图片的时候也会出现像素混合 4.离屏渲染,可以结合instrument结合使用 4.1.在tableView中展示多张需要切圆形的图片,此时不要使用setCornerRadius的方法,这样耗损性能,我弄了一个UIImage的分类,用Core Graphics绘制圆角,然后返回图片,在SDWebImage处理我的分类返回的图片,并进行缓存。 检测结果:我用Instruments的Core Animation查看性能Color Offscreen-Rendered Yellow没有发现离屏现象,这样就解决了 5.UIImage:本地图片加载方式本地图片加载常用方法有两种: 5.1. [UIImage imageNamed:@"xx.png"] 图片多次使用时使用,需要使用此方式加入缓存 5.2. [[UIImage alloc] initWithContentsOfFile :@"xx.png"] 图片不常使用时,不使用缓存 6.如果控件是透明的,需要设置opaque为YES。参考:http://blog.csdn.net/songchunmin_/article/details/51125992 7.避免对象创建时过多消耗资源例如:日期处理,将保持日期对象全局唯一 8.性能检测静态分析APP:菜单-Product-Analyze可以定位未使用的变量,内存泄漏分析APP每个操作占用时间: Instruments-Time profiler。动态分析内存泄漏:Instruments-Leaks。