一、查看Crash Report
-
通过Xcode的Devices中把crash日志导出来:
image.png -
查看dSYM 文件,一般查看友盟的dSYM 文件。
image.png - 这里可以看出这个错误的原因是数组越界了,那么问题来了,我们并不知道是哪里越界,上面只给出了一个内容地址:
6 YHRSS 0x100041378 YHRSS + 267128
-
步骤1:
image.png -
步骤2:
image.png -
步骤3:
image.png
我们 cd 到该文件目录下,然后执行:
atos -arch arm64 -o YHRSS 0x1000420b0
注意这里的 -arch 是和上面 crash 报告中的对应,否则是看不到相应的信息的:
specialized YHArticlesViewController.tableView(_:heightForRowAt:) (in YHRSS) (YHArticlesViewController.swift:215)
这样我们能就精准地获取 crash 出现的具体位置,然后就该是发挥自我价值的时候了。
二、p po断点查看
image.png三、Time Profiler
time profile 是时间分析工具,主要用来检测应用 CPU 的使用情况,可以看到应用程序中各个方法消耗 CPU 时间。关于概念,这里就不详细介绍了,直接进行实际操作:
-
通过 xcode 中的 product --> profile 来启动 Instrument,并选择 Time Profiler 工具:
image.png -
运行 Time Profiler,配置显示方式,分线程显示和隐藏系统的无关内容:
image.png -
在手机上执行想要测试的操作,执行完后停止 Time Profiler 进行分析:
image.png -
找到主要耗时的地方,并定位到具体的代码行(点击方法的小箭头就可以进入相应的代码处):
image.png
- 这里可以看出,主要有两一个耗时的操作,但明显后面那我格式转换我们没有办法去处理,我们只能从第一个入手。它每次创建都比较耗时,那么我们就不要多次去创建,因为它每次使用的格式的都是一样的,这样我们实质上只需要创建一次就可以了。那我们有什么方法去只创建一次呢,首先能想到的肯定是单例,但是用单例太麻烦了,通过 static 定义成一个常量就可以了,就这样,这处的性能问题就解决了,其它地方也可以通过同样的方法,逐步分析和解决就可以了。
网友评论