美文网首页
2019-02-19 iOS优化

2019-02-19 iOS优化

作者: 默默的我 | 来源:发表于2019-02-19 11:31 被阅读0次

转载 https://www.jianshu.com/p/483aa2607e63

一、性能优化建议

1.懒加载

– 延迟加载

– 不需要的对象不立即初始化,需要用到时才初始化

– 重写对象的getter方法

2.尽量不阻塞主线程

– 同步 vs 异步

– 延迟调用

3.慎用Autolayout

– 简单、强大易用、可读性强

– updateConstraints调用时机

– 性能问题

4.慎用NSDateFormatter

8151395.png

• 输出结果:

– using    NSDateFormatter costs  1.349986    milliseconds

– using    local1me    costs  0.090957    milliseconds

• 应减少对NSDateFormatter的调用,或用 localtime替代

5.慎用[NSString sizeWithAttributes:]

7344659.png

• 输出结果: – Text  width  61.14  costs  17.042994  milliseconds

– Text  width  60.00  costs  0.000000    milliseconds

• 减少字符串size的实时计算,或寻求替代方案

• 原则:技术调研要到位,分析和实践相结合

二、崩溃率

**• 崩溃日志收集 **

– Crash Reporter

– itunes Connect

– Bugly

– Crashly1cs

– 友盟等

**• 崩溃日志解析 **

– symbolicatcrash

– xcrun atos

– dwarfdump

• 按崩溃分布定优先级解决问题

三、内存优化建议

1、autoreleasepool的使用

autoreleasepool的使用 .png

2、避免循环引用

• 第三方内存泄露检测工具

– FBRetainCycleDetector

– FBAlloca1onTracker

– FBMemoryProfiler

• 防止使用block时出现引用闭环

– Reactive Cocoa中用到的一种宏:weakify、strongify

– 强弱引用转换,用于解决block与强引用self之间的循环

•引用问题

引用问题.png

3、读图方式优化

• [UIImage imageWithContentsOfFile:@""]

– 优点

​  • 不缓存图片到内存,内存可及时释放

​  • 适用于大图片,使用完就释放

– 缺点

​  • 无法读取Asset Catalog里的图片

​  • 读取图片需要完整文件名

• [UIImage imageNamed:@""]

– 优点

​  • 图片始终缓存,适用于某些需要在多个地方显示的图标,其对应

​      的UIImage对象只会被创建一次,避免频繁的沙盒读写

– 缺点

​  • 缓存图片到内存,不能及时释放

4、选择正确的缓存策略

•基本原则

​  – 缓存需要的

​  – 缓存常用的

​  – 缓存计算或生成开销较大的

• 优化实践

​  – 非常用功能退出后,立即释放相关内存占用

​  – 有选择缓存图片资源、数据资源

5、降低内存占用峰值

• 目标

​  – 始终保持应用内存占用处于一个相对平稳的范围内

• 优化实践-通讯录信息联想内存优化

​  (1)、面临问题

​  – 手机通讯录规模庞大,在多次进行通讯录信息联想时,

​  存在较大的内存峰值,容易引发内存问题

​  (2)、解决方法

–CFArrayRefABAddressBookCopyArrayOfAllPeople    (ABAddressBookRef addressBook)

–CFArrayRefABAddressBookCopyPeopleWithName    (ABAddressBookRef addressBook,CFStringRefname)

PS:ios9之后出了全新的联系人相关框架——Contacts Framework,摒弃了之前AddressBookFramework的相关api的繁琐操作。有关Contacts Framework的资料可以参考Contacts Framework

以下是加载通讯录5000+条的优化前后对比

通讯录规模5000+.png

6、内存文件映射的使用

• 优点

​  – 内存文件映射对应external

​  – 不算应用程序占用的内存,能有效减少应用程序占用

​  的内存,避免触及低内存阈值

• 缺点

​  – 性能消耗问题

​  – 映射文件的大小、个数需要考虑,两者权衡

• 使用文件映射

​  – NSData: + dataWithContentsOfFile:op1ons:error:;

​  – mmap、munmap、msync

7、FastImageCache的使用

​  – Path团队开发的一个开源库,用于提升图片的加载和渲

​  染速度

​  – Mapped memory

​  – Uncompressed Image Data

​  – Byte Alignment

​  – GitHub下载:https://github.com/path/FastImageCache

以上优化建议参考MDCC2016搜狗输入法性能优化实践的演讲记录,资料共享,希望对大家有所帮助!MDCC2016演讲资料

作者:Arxu

链接:https://www.jianshu.com/p/483aa2607e63

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

相关文章

网友评论

      本文标题:2019-02-19 iOS优化

      本文链接:https://www.haomeiwen.com/subject/klyxyqtx.html