您有一份APP内存优化的报告,请查收~

APP性能优化之内存优化

随着APP功能的增加和版本不断的迭代,内存优化也迫在眉睫。(涉及公司和项目名称的会进行遮盖)

APP优化所用工具:

Xcode Version 13.4.1 (13F100)

Instruments Version 13.4.1 (13F100)

Simulator iPhone 13 Pro Max(iOS 15.5)

静态分析(Analyze)

优化before

  1. 通过静态分析,可以看到内存疑似泄漏点,这个需要我们根据具体业务去分析。

  2. 找到一个疑似泄漏点,根据Xcode勘测分析

  3. 逐条分析并修改

    • CaptureViewController 实例方法缺少 [super ViewDidDiscovery:] 调用
    • PhotoViewController block强引用10处
    • Memory error未修改:基本都是返回类型 NSString 存在返回 nil 情况
    • Localizability Issue 未修改:面向用户的文本没有使用本地化字符串宏
    • CFStringRef 会使引用计数+1,必须调用 CFRelease()
    • Core FoundationObjective-C 转换存在持有权的移交

优化after

通过 静态分析(Analyze) 查到的疑似泄漏点全部修复完毕。

Debug Memory Graph

优化before

  1. 通过 Debug Memory Graph 我们可以看到有29种泄漏类型

  2. 点击某一个查看 Memory Graph 可以看到内存的一个引用关系

  3. 逐表分析并修改

    • ClickHightlightDelegate 修改为弱引用
    • UITextFieldDelegate 修改为弱引用
    • UITextViewDelegate 修改为弱引用
    • 删除 ImagePickerViewDelegate,改为实例方法
    • GMImagePickerControllerDelegate 修改为弱引用
    • AFHTTPSessionManager 及时释放session

优化after

剩余5种泄漏类型,属于malloc block leaked,工具并没有指出泄漏点,需要我们进一步分析。

动态分析

优化before

  1. 通过 leaks 工具分析,一处就有384新的泄漏点

  2. 随便点了几个模块,共有779个泄漏处

  3. 根据泄漏处的代码修复

    • pageController 修改为弱引用
    • WebNativeViewController 修改block回调的引用关系
    • WebNativeDataSource 修改block回调的引用关系
    • FeedbackDelegate 修改为弱引用
    • WebImageUtils 修改为弱引用
    • WebNativePagingCell 修改为__weak弱引用
    • WebPluginShare 修改为__weak弱引用
    • JSContext 优化引用关系和内存释放

优化after

  • 修复好大部分泄漏点
  • 目前遗留JavaScriptCore框架待优化

优化成果

优化之前

  1. Viewcontroller 不能销毁,不触发 dealloc

  2. APP启动,初始内存

  3. 按照指定路径,并反复点击,内存一直在增加

优化之后

  1. Viewcontroller 可以销毁,触发 dealloc

  2. APP启动,初始内存

  3. 按照指定路径,并反复点击,内存稳定不会暴增

猜你喜欢

转载自blog.csdn.net/wujakf/article/details/128342208