在上次面试的时候,面试官就手机app的各种优化问了我几个问题,我个人觉得回答的不是很好,可能是好久没有去整理总结了,回答的时候就我做的项目中遇到的问题来回答的,没有正面的去回答要注意和规避什么,就这个问题我做个一个总结
1.iOS安装包优化
1.1 资源优化:
- 资源优化:
一般我们在做一个项目的时候都会牵涉到图标、图片、音视频等的导入,优秀的UI会帮我们优化和压缩这些图片,但是不是很优秀的UI做完就直接甩过来用,那么我们就需要把这些视图资源进行压缩,我一般喜欢用PPDuck来进行图片的压缩 - 编译优化:
去除符号信息(新版xcode默认),这个我不是很熟悉,如果熟悉的大佬可以说一下 - 可执行文件优化:
查看第三方库编译之后.o文件的大小,如果对大小影响很大的话可以考虑替换
删除无用的代码,即删除一下项目中没有引用的类和方法,优化代码
1.2 内存优化:
- 延迟加载视图和资源
- 项目中最好做好缓存,像微博首页一样,一个列表展示的内容如果在没有变化或者修改之前加载本地的资源,一般我是用YYCache来进行本地的缓存
- 自动释放池Autorelease pool降低内存,这个我暂时还在学习状态
- 图片的缓存工作,比如我目前看来最好用的也是图片缓存最好的就是SDWebImage
1.3 内存优化:
- 不要将view设置成透明,避免图层混合,消耗cpu资源
- 尽量避免重写DrawRect、圆角、阴影等导致离屏渲染的效果
- 如果一个vc或者view中视图的加载过多的话,优先使用frame布局,Autolayout这时候的性能低于frame
- 合理处理线程,I/O操作不要在主线程执行
- 预处理和延时加载:尽量提前加载可视化内容,优先级比较低的阔以延迟加载,提高用户的体验
- 使用正确的API,如imageNamed:和imageWithContentsOfFile:的差异
- TableView的优化 (解决UItableView卡的问题)
- 复用单元格合适的重用标识reuseIdentifier,重用cell
- 对于高度固定的cell直接设置rowHight,保证不必要的高度计算和调用。
- 对于cell是动态行高,估算行高后缓存,我一般都在model里面去计算好了之后再赋值,也可以使用第三方
- 单元格中的视图尽量不透明,单元格中尽量少用动画
- 单元格图片异步加载
- 滑动时不加载图片,停止滑动时开始加载
- 使用runloop滑动来加载图片,在页面空闲时执行计算,滑动列表时不执行计算任务不然会影响用户体验
- cell圆角处理,避免离屏渲染
- 单元格中的内容在自定义cell类中的drawRect方法内自己绘制
- 减少reloadData全部cell,只reloadRowsIndexPath
网友评论