iOS性能优化总结

一、启动优化:

1.main函数之前:删除不用的类、以及图片、load方法可以改成initialize情况下改掉、减少单例、减少不用的动态库、减少selector、减少类分类的数量、合并自研的动态库
、减少xib、检测重复代码或未被调用的代码、linkMap分析那个包占用资源大 AppCode检测未使用的代码。
2.main函数之后:第三方延迟加载初始化、首页异步加载缓存。
3.二进制重排。

二、卡顿优化

1.设置圆角不设置maskToBounds、不在layousubViews修改布局、设置layer阴影path、layer替换UIView、富文本计算高度、layout层提前计算view 或者cell的布局、异步线程绘制图片、异步添加水印、webp图片替换jpg、设置frame 统一调用、不使用xib、图片size跟后端设计商量按UIImageView大小设置、减少mask遮罩使用backgroundColor、timer统一替换成dispatch_source_t、减少图层、减少离屏渲染(上下文切换,两个渲染缓冲区来回切换)。
2.加载大图片或者使用率低图片使用initWithContentsOfFile(用完就销毁)。
imageNamed时全局缓存图片,第一次退后后台和收到内存警告时才会清除。
3.不透明的视图opaque设置为YES、
4.尽量避免日期格式转换:后端返回格式化的时间。
5.界面消失时暂停timer
6.cell上视图不要remove 要用hidden
7.尽量不要调用drawRect或者 setDeedDisplay。

三、内存优化

3.0autoreleasepool

1.autoreleasepool(在runloop结束是释放的)及时释放局部变量、懒加载view、静态分析内存泄露、动态分析具体页面内存泄露、使用第三方库内存泄露检测
2.比较复杂的界面采用tableView绘制,利用tableView的复用机制减少不必要的渲染和内存占用。

3.1内存警告时:

1.清空SDWebImage缓存,管理单例类将不重要的单例置为nil。
2.使用UIImage drawInRect 绘制图片是先解码图片,再生成原始分别率大小的bitmap,很耗内存,使用ImageIO接口避免中间bitmap产生。

3.2内存泄露:

1.UIGraphicsEndImageContext 和 UIGraphicsBeiginImageContext 必须成对出现不然会造成cotnent泄露.
2.CAAnimation的delegate也是对Objc的强引用
3.NotificationBlock用法 是单例 会保存里面的self的生命周期会内存泄露
4.CF创建的对象必须 CFRelease下。

3.3循环引用

1.block、delegate、wkwebview的useContentController addScriptMessageHandler:self
2.UIAlertController的事件里面使用alert,用__weak
3.NSTimer
4.A类别中动态添加属性B,如果属性B应用到A,容易引起循环引用
5.把self加入到NSArray中
6.NSNotification 引用self iOS9.0之前是需要手动remove,iOS9.0自动remove
7.设置CALayer的delegate是self,

四、耗电优化

1.合并图片请求一个接口、无网络不请求有网络再请求、断点续传、弱网超时时间更改、定位完及时停掉定位、一定时间内不重新定位(BecomeDidAppear)
2.使用dispatch_io 读写数据
3.缓存IP地址 使用httpDNS

五、Swift编译速度优化

1.私有库二进制化
2.删除NSLog
3.查看耗时函数:三目运算、if语句运算、减少if替换橙switch、不要混合计算
xib约束问题、不要类型推断、计算中最好不要出现可选值、if语句不要出现可选可选类型、高阶函数 {}要指明参数和返回值。
4.debug不生成dysm文件
5.设置Deployment Postprocessing 和 Strip Linked Porduct 同时设置为YES,构建会去除symbol符号就时类名 函数名。不影响日志和解析。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。