在IOS项目开发过程中,常用到静态分析(Analyze)、断点(BreakPoint)和控制台(Console)进行代码调试 。本篇文章介绍Xcode常用调试方法之”静态分析“ 。
本文来自360奇舞团QiShare团队投稿 。
一、简介Xcode的静态分析功能是在程序未运行的情况下,对代码的上下文语义、语法、和内存情况进行分析,可以检测出代码潜在的文本本地化问题(Localizability Issue)、逻辑问题(Logic error)、内存问题(Memery error)、数据问题(Dead store)和语法问题(Core Foundation/Objective-C)等 。功能入口在Xcode菜单栏
-> Product -> Analyze(Command+Shift+B) 。图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/02513B558-0.jpg)
文章插图
二、文本本地化问题当工程Target -> Build Settings -> Static Analyzer下的Missing Localizability设置为YES时,使用Analyze功能后可以发现一些控件会提示文本本地化问题User-facing text should use localized string macro 。图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/02513C118-1.jpg)
文章插图
按照提示,使用NSLocalizedString(<#key#>, <#comment#>)修饰文本即可修复,图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/0251364351-2.jpg)
文章插图
或者,将Missing Localizability设置为NO也可以 。图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/02513CE5-3.jpg)
文章插图
三、逻辑问题【iOS常用调试方法:静态分析】使用Analyze可以分析出来代码中潜在的逻辑问题 。比如直接使用NSNumber的对象作为条件时,会得到提示Converting a pointer value of type 'NSNumber *' to a primitive boolean value; instead, either compare the pointer to nil or call -boolValue 。图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/0251361040-4.jpg)
文章插图
根据提示,我们有两种修改方式,图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/02513623D-5.jpg)
文章插图
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/02513630Y-6.jpg)
文章插图
虽然这两种修改方式都能解决问题,但不完全一样,要注意其中的差别,选择需要的使用 。
四、内存问题虽然ARC帮助开发者管理了大部分的内存问题 。但像CGImageRef等C系列的代码还需要开发者管理内存 。这些内存问题在编译过程中很难发现,但使用Analyze可以给出相应的提示 。图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/02513B042-7.jpg)
文章插图
上图中有两处和内存相关的提示,开发者可以按照提示进行相应的修改 。图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/0251363H0-8.jpg)
文章插图
五、数据问题在编码过程中,一些数据问题可以通过Analyze很好的提示出来 。比如下图:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/0251364242-9.jpg)
文章插图
上图中的string被提示在初始化后从未被用到 。是因为第二部的赋值操作为string重新申请了内存 。这时,开发者去掉第一步初始化方法即可 。图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/0251364I5-10.jpg)
文章插图
六、语法问题在重写类的init方法时,有时会手误写出语法问题,这时可以使用Analyze检测出问题 。图示如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/02513A635-11.jpg)
文章插图
根据提示自己检查可以知道是if语句写错了,多了一个= 。修改如下:
![iOS常用调试方法:静态分析](http://img.jiangsulong.com/220402/0251364G1-12.jpg)
文章插图
总结上述几部分内容只是对Analyze功能的举例,其实际能检测出的问题会更多 。另外,Analyze也有自己的局限性,其检查结果也只是辅助开发者查找问题,真正优化代码需要开发者更多的技术经验 。
推荐阅读
- iOS常用调试方法:LLDB命令
- iOS系统的底层通知框架库
- 手机信号栏常用“符号”大揭秘!
- WordPress常用的函数、方法汇总
- 5种最常用的黑客工具,以及如何防御
- iOS13新增重磅功能!不止续航改善,这两个功能才是王炸
- HTML5网页录音和上传到服务器,支持PC、Android,支持IOS微信
- python中全部关于字符串常用操作的总结
- ios13闪退怎么解决
- 常用架构模式