美文网首页
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