关于ios:iOS性能优化之内存优化

38次阅读

共计 1207 个字符,预计需要花费 4 分钟才能阅读完成。

iOS App 通常状况下的三种内存类型

  • Clean Memory
  • Dirty Memory
  • Compressed Memory

    iOS 开发交换技术群:563513413,不论你是大牛还是小白都欢送入驻,分享 BAT, 阿里面试题、面试教训,探讨技术,大家一起交流学习成长!

Clean Memory

Clean Memory 是指那些能够用以 Page Out(当内存不足的时候,零碎会依照肯定策略来腾出更多空间供应用,比拟常见的做法是将一部分低优先级的数据挪到磁盘上)的内存。

  • Code
  • frameworks(每个 frameworks 都有 _DATA_CONST 段,当 App 在运行时应用到了某个 framework,它所对应的 _DATA_CONST 的内存就会由 Clean 变为 Dirty)。
  • memory-mapped files(被加载到内存中的文件)

Dirty Memory

Dirty Memory 是指那些被 App 写入过数据的内存。

  • Heap allocations(所有堆区的对象)
  • 图像解码缓冲区
  • database caches(咱们对数据进行缓存的目标是想缩小 CPU 的压力,然而过多的缓存又会占用过大的内存。因为内存压缩机制的存在,咱们须要依据缓存数据大小以及重算这些数据的老本,在 CPU 和内存之间进行衡量。
    在一些须要缓存数据的场景下,能够思考应用 NSCache 代替 NSDictionary,因为 NSCache 能够主动清理内存,在内存吃紧的时候会更加正当。

留神:Clean memory,也包含 App 所用到的 frameworks。每个 framework 都会有 _DATA 段和 _DATA_DIRTY 段,它们的内存是 Dirty 的。

Compressed Memory

当内存吃紧的时候,零碎会将不应用的内存进行压缩,直到下一次拜访的时候进行解压。

例如,当咱们应用 Dictionary 去缓存数据的时候,假如当初曾经应用了 3 页内存,当不拜访的时候可能会被压缩为 1 页,再次应用到时候又会解压成 3 页。

为什么要缩小内存

让本人的 App 能够有更好的用户体验:更快的启动速度,不会因为内存过大而导致 Crash,能够让 App 存活更久等。

工具监控内存

  1. Xcode Debug Area
  2. Instruments
  3. DebugMemoryGraph

线上查看工具

Allocations

  • FBAllocationTracker

Leaked memory

  • MLeaksFinder
  • FBRetainCycleDetector

优化技巧方向

  • 视图层级很多的状况做一些解决
  • 对一些大的数据或者资源的解决
  • 对很多对象的解决
  • 防止内存抖动太大,比方能够用 @autoreleasepool 解决 for 循环大量长期对象造成的问题。
  • 内存泄露的解决
  • 收到内存正告时候做一些解决,比方用 NSCache 代替 NSDictionary,应用 NSPurgableData 代替 NSData。让零碎在内存不足状况下本人清理内存。
  • 对图片的解决,比方格局的抉择,或者缩放等。
正文完
 0