一、性能优化建议
1.懒加载
– 延迟加载
– 不需要的对象不立即初始化,需要用到时才初始化
– 重写对象的getter方法
2.尽量不阻塞主线程
– 同步 vs 异步
– 延迟调用
3.慎用Autolayout
– 简单、强大易用、可读性强
– updateConstraints调用时机
– 性能问题
4.慎用NSDateFormatter
• 输出结果:
– using NSDateFormatter costs 1.349986 milliseconds
– using local1me costs 0.090957 milliseconds
• 应减少对NSDateFormatter的调用,或用 localtime替代
5.慎用[NSString sizeWithAttributes:]
• 输出结果: – 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的使用
2、避免循环引用
• 第三方内存泄露检测工具
– FBRetainCycleDetector
– FBAlloca1onTracker
– FBMemoryProfiler
• 防止使用block时出现引用闭环
– Reactive Cocoa中用到的一种宏:weakify、strongify
– 强弱引用转换,用于解决block与强引用self之间的循环
•引用问题
3、读图方式优化
• [UIImage imageWithContentsOfFile:@""]
– 优点
• 不缓存图片到内存,内存可及时释放
• 适用于大图片,使用完就释放
– 缺点
• 无法读取Asset Catalog里的图片
• 读取图片需要完整文件名
• [UIImage imageNamed:@""]
– 优点
• 图片始终缓存,适用于某些需要在多个地方显示的图标,其对应
的UIImage对象只会被创建一次,避免频繁的沙盒读写
– 缺点
• 缓存图片到内存,不能及时释放
4、选择正确的缓存策略
•基本原则
– 缓存需要的
– 缓存常用的
– 缓存计算或生成开销较大的
• 优化实践
– 非常用功能退出后,立即释放相关内存占用
– 有选择缓存图片资源、数据资源
5、降低内存占用峰值
• 目标
– 始终保持应用内存占用处于一个相对平稳的范围内
• 优化实践-通讯录信息联想内存优化
(1)、面临问题
– 手机通讯录规模庞大,在多次进行通讯录信息联想时,
存在较大的内存峰值,容易引发内存问题
(2)、解决方法
– CFArrayRef ABAddressBookCopyArrayOfAllPeople
(ABAddressBookRef addressBook)
– CFArrayRef ABAddressBookCopyPeopleWithName
(ABAddressBookRef addressBook, CFStringRef name)
PS:ios9之后出了全新的联系人相关框架——Contacts Framework,摒弃了之前AddressBookFramework的相关api的繁琐操作。有关Contacts Framework的资料可以参考Contacts Framework
以下是加载通讯录5000+条的优化前后对比
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演讲资料