问题
1.你的项目中整么优化内存
2.你的项目优化从哪些方面着手
3.APP启动流程,启动过程当中的优化
答案
1.你的项目中整么优化内存
1.重用和延迟加载(lazy load)Views
2.对于图片在UIImageView显示的时候,尽量保证图片的大小 和 UIImageView 大小一致(因为在系统运行中,图片的缩小和放大都是需要消耗大量的资源)
3.自定义drawRect中绘制尽可能使用 CAShapelayer(这个是直接交给GPU,不消耗内存)
4.对于使用频率很低的图片(大图),使用UIImage(contentsOfFile: "")这样,图片对象就不会保存在缓存中,节省了内存
5.对不View 特别是那种滚动的View最好少使用那种透明(opaque)属性,最好是不透明,透明会增加系统消耗
2.你的项目优化从哪些方面着手
1.卡顿优化
1.对于比较复杂界面,用不到时间处理的地方,可以考虑用CALayer 代替 UIView
2.有些确定的大小他frame ,就直接用frame,不用autolayout
3.图片的size最好和 UIImageView保持一致
4.尽量包耗时操作提前放到子线程中做好
5.控制以下线程最大的并发数量
6.图片处理(解码,绘制)
7.尽量减少视图的层次 和 数量
8.减少透明视图
9.尽量避免出现离屏渲染
2.卡顿检查
1.平时说的卡顿,主要是因为主线程的耗时操作
2.可以添加Observer 到主线程Runloop 中,通过监听Runloop 切换的耗时,达到监控卡顿的目的
3.耗电的来源
1.尽量少使用定时器
2.不要频繁读写文件,最好一批写入,如果数据量比较大,最好使用数据库
3.如果多次请求数据相同,需要缓存(和后台沟通好)
4.对于网络也是非常耗电点,能不请求就不发送请求,能够一次完成就一次完成(大文件下载,断点下载,断点续传)
5.使用更加轻的数据
6.对于定位精度要求不用太高,不要实时定位
7.对于硬件的使用,(比如摇一摇,倾斜设备)不需要的时候就关掉这些对硬件的检查功能
3.APP启动流程,启动过程当中的优化
1.冷启动流程:
1.dyld(加载动态库)
2.runtime(load方法,加载图片等)
3.main函数
总结:APP的启动有dyld主导,将可执行文件加载到内存,顺便加载所有的依赖动态库;并有runtime负责加载成objc定义的结构,等runtime 结束初始化工作后,dyld就会调用main函数,接下来就是UIApplication 函数了
2.启动过程中的优化:
1.减少动态库,合并动态库(定期清理不必要的动态库)
2.减少Objc类,分类的数量(定期清理不必要的分类,类)
3.尽量使用 initialize 方法 代替 load
4.按需加载,启动不需要的东西延迟加载