【Xcode应用】iOS性能分析

性能分析工具

腾讯PerfDog

支持Android/iOS移动平台,提供PerfDog软件Windows&Mac版本。Android设备无需ROOT, iOS设备无需越狱,简单易用。

可帮助我们轻松获得 FPS、Jank、FTime、CPU、GPU、Memory、Battery 、Network、CTemp等性能参数。

包大小

APP的安装包占用体积过大,可能会造成部分用户的流失,主要原因:

  • App Store限制使用蜂窝网络下载超过200MB的APP

【Xcode应用】iOS性能分析_第1张图片

  • 低端机磁盘空间小,无法安装过多APP,对APP占用空间数量比较敏感
  • 低端机运行内存少,APP运行过程中占用内存过多,会导致APP处于前台或者后台时被系统杀掉,造成APP闪退

设置输出Link Map文件:Xcode – Build Settings – Write Link Map File为YES
编译后可在如下位置找到该文件。

$(TARGET_TEMP_DIR)/$(PRODUCT_NAME)-LinkMap-$(CURRENT_VARIANT)-$(CURRENT_ARCH).txt

下载Link Map分析工具:

git clone https://github.com/huanxsd/LinkMap

选择分组分析,可得到不同组件库占用的存储大小。

内存泄漏

Analyze

XCode – Debug – Analyze:(静态内存泄漏检测)

Leaks

Instruments – Leaks:(动态内存泄露检测)

  • Leak by Backtrace:
    可以查看内存泄漏发生的对象、内存占用大小、责任所在库、责任所在方法堆栈,还支持搜索上述这些关键字。

  • Call Tree:
    勾选Invert Call Tree和Hide System Libraries,可以更清晰地看到自己编写的代码中的问题。

  • Leak Cycles:
    选择泄漏的对象,可以查看循环引用情况。

Memory Graph

在Xcode运行APP,点击「Debug Memory Graph」,再点击「Show only leaked blocks」,过滤内存泄漏警告,搜索类前缀

【Xcode应用】iOS性能分析_第2张图片
如果在工程「Schema」–「Diagnostics」中没有勾选 Malloc Stack 在调试的时候,在右侧是看不到调用的堆栈信息。

ps:

  1. 勾选 Malloc Stack 之后内存会相应的增高,如果不调试可以关闭该选项
  2. 建议选择 Live Allocations Only 如果选择 All Allocations and Free History 会出现一些额外的影响因素

【Xcode应用】iOS性能分析_第3张图片

参考:Xcode Debug Memory Graph - 内存调试利器

CPU、内存占用

iOS系统对APP进程性能参数做严格限制,超过限制则会引发OOM被系统kill,因此控制APP内存占用很有必要。

Memory 是统计FootPrint,注:OOM与FootPrint有关,与系统、机型无关。只与RAM有关,如1G内存机器。

  • Xcode Memory (XCode Debug gauges统计方式即XCode Memory)
  • Real Memory(Xcode Instrument统计方式即Real Memory,实际占用物理内存。注:物理内存系统策略有关,衡量内存指标时不会关注,但是它有助于分析定位整体性能问题。比如:footprint没有降低,说明应用没有释放内存,但是real memory却降低了,说明系统对内存做了压缩。由于压缩会占用CPU资源,同时相应会导致FPS降低)
  • Virtual Memory(虚拟内存)

iPhone、iPad各机型发生闪退的内存阈值,总内存及其占比(iOS APP最大内存阈值参考地址):

Device Crash Amount Total Amount Percentage of Total
iPad1 127MB 256MB 49%
iPad2 275MB 512MB 53%
iPad3 645MB 1024MB 62%
iPad4 585MB 1024MB 57% (iOS 8.1)
iPad Mini 1st Generation 297MB 512MB 58%
iPad Mini retina 696MB 1024MB 68% (iOS 7.1)
iPad Air 697MB 1024MB 68%
iPad Air 2 1383MB 2048MB 68% (iOS 10.2.1)
iPad Pro 9.7" 1395MB 1971MB 71% (iOS 10.0.2 (14A456))
iPad Pro 10.5” 3057 4000 76% (iOS 11 beta4)
iPad Pro 12.9” (2015) 3058 3999 76% (iOS 11.2.1)
iPad Pro 12.9” (2017) 3057 3974 77% (iOS 11 beta4)
iPad Pro 11.0” (2018) 2858 3769 76% (iOS 12.1)
iPad Pro 12.9” (2018, 1TB) 4598 5650 81% (iOS 12.1)
iPad 10.2 1844 2998 62% (iOS 13.2.3)
iPod touch 4th gen 130MB 256MB 51% (iOS 6.1.1)
iPod touch 5th gen 286MB 512MB 56% (iOS 7.0)
iPhone4 325MB 512MB 63%
iPhone4s 286MB 512MB 56%
iPhone5 645MB 1024MB 62%
iPhone5s 646MB 1024MB 63%
iPhone6 645MB 1024MB 62% (iOS 8.x)
iPhone6+ 645MB 1024MB 62% (iOS 8.x)
iPhone6s 1396MB 2048MB 68% (iOS 9.2)
iPhone6s+ 1392MB 2048MB 68% (iOS 10.2.1)
iPhoneSE 1395MB 2048MB 69% (iOS 9.3)
iPhone7 1395 2048MB 68% (iOS 10.2)
iPhone7+ 2040MB 3072MB 66% (iOS 10.2.1)
iPhone8 1364 1990MB 70% (iOS 12.1)
iPhone X 1392 2785 50% (iOS 11.2.1)
iPhone XS 2040 3754 54% (iOS 12.1)
iPhone XS Max 2039 3735 55% (iOS 12.1)
iPhone XR 1792 2813 63% (iOS 12.1)
iPhone 11 2068 3844 54% (iOS 13.1.3)
iPhone 11 Pro Max 2067 3740 55% (iOS 13.2.3)

Instruments – Activity Monitor

搜索过滤进程名称,选择Matches Any。通过Add Tag来标记对应的时间段,Live Processes结果中可以看到对应的Process Name和Momory。

Instruments – Time Profiler

检测分析代码的执行时间

Instruments – App Launch

分析APP启动指定时间内的代码执行情况

你可能感兴趣的:(开发环境)