一,全局断点。
Symbol中添加的是进入断点的条件,这里添加两次,分别输入:
-[NSException raise]
objc_exception_throw
如图:
分别表示在全局代码中获取异常后会进入断点,例如在主线程中,因为数据的下标问题,抛出一个异常,此异常再ViewController 下的viewDidLoad方法中:
二,异常断点。
添加异常断点,然后会在全局代码有异常的时候进入断点,可以更快速的发现系统崩溃原因。
运行程序后会直接进入异常代码块,然后可进行排查:
三,查看函数耗时情况,这里是查看App启动花费的时间。
TimeProfiler查看耗时:
直接打开Xcode,找到Product->Scheme->Edit Scheme->Run->Arguments->Environment Variables->DYLD_PRINT_STATISTICS 设置为 YES。
然后运行程序则会在控制台输出App启动所花费的时间:
Total pre-main time: 89.84 milliseconds (100.0%) dylib loading time: 140.32 milliseconds (156.1%) rebase/binding time: 126687488.8 seconds (346416737.9%) ObjC setup time: 16.38 milliseconds (18.2%) initializer time: 56.46 milliseconds (62.8%) slowest intializers : libSystem.B.dylib : 5.49 milliseconds (6.1%) libBacktraceRecording.dylib : 6.87 milliseconds (7.6%) libobjc.A.dylib : 2.20 milliseconds (2.4%) libMainThreadChecker.dylib : 34.86 milliseconds (38.8%) libLLVMContainer.dylib : 2.26 milliseconds (2.5%)
三,Xcode工具Instruments只时间分析工具,Time Profiler。
Time Profiler通过比较时间间隔之间的堆栈状态,来推算出某个方法执行了多久,给出一个近似值。操作如下:
1,打开Instruments,选择Time Profiler,然后点击左上角选择好运行环境及项目,然后点击开始:
可以清晰的看到每个方法执行了多长时间,在哪个线程下面,所占CPU等信息,然后根据当前信息进行优化。
2,点击某个方法可直接进入方法体:
3,可通过筛选去查看及寻找想要的结果,然后进行优化:
Separate by Thread:按线程分开做分析;
Invert Call Tree:反向输出调用树;
Hide Missing Symbols:隐藏缺失符号;
Hide System Libraries:隐藏系统库文件;
Flattern Recursion:拼合递归;
Top Functions:找到最耗时的函数或方法。
三,内存泄露之Leaks。
Leaks是查看当前项目哪部分代码块内存泄露的工具,具体操作如下。
打开Instruments工具,然后选择Leaks,然后:
选择Call trees,然后选择隐藏系统库和最大内存泄露展示的选项:
然后根据工具提示获取到代码块,点击进入详情的代码块,具体泄露了多少内存,在那一行都有展示。
个人习惯,一般昨晚项目之后,先对项目中的视图进行优化(UIView,UITableview等),然后检查启动优化,然后去删除项目中一些没用的文件资源,例如图片,html等,然后再去做内存,CPU,电池优化。
内存优化首先去Analyze下项目,看看大模块的内存泄露,然后用Leaks去优化。