instrument之Xcode Analyze 代码静态检查及问题解决

Static Code Analysis(静态代码分析)用来发现源代码潜在的错误与缺陷,源代码编译后只有在运行时有可能会产生细微的错误,他们可能难以识别和修复,所以这些潜在的威胁在开发过程中一定要尽可能清理干净,尽量编写的时候注意类似可能潜在的威胁与缺陷。击查看苹果Static Code Analysis官方介绍)

一.可以识别的问题与缺陷

.逻辑缺陷,如访问未初始化的变量和空指针

.内存管理的缺陷,如分配后的内存泄漏

.无效数据(未使用的变量)缺陷

.使用api缺陷,不遵循库或者框架的使用规则

示例:
instrument之Xcode Analyze 代码静态检查及问题解决

二,操作

  在Xcode 选项栏里面选择Product -> Analyze (快捷键: command + shift + B) ,点击运行即可。    
instrument之Xcode Analyze 代码静态检查及问题解决
instrument之Xcode Analyze 代码静态检查及问题解决

三,问题列表

1、Localizability Issue (Apple)

大概意思是:1、这里是非本地化的文字 2、面向用户的文本应使用本地化的字符串宏

别慌,下图是 Xcode检测到缺少本地化~~~ 请看下面解决办法

instrument之Xcode Analyze 代码静态检查及问题解决 
instrument之Xcode Analyze 代码静态检查及问题解决
检查文字本地化

解决方法:在 Build Settings 里面找到 Missing Localizability(缺少本地化) 设置为NO,就会忽略这个问题啦,  或者 , 你也可以在应用里面进行本地化。

instrument之Xcode Analyze 代码静态检查及问题解决

instrument之Xcode Analyze 代码静态检查及问题解决

2、Dead store

无效数据: 意思就是有一些属性或者对象初始化了又没被使用 
instrument之Xcode Analyze 代码静态检查及问题解决
问题代码
instrument之Xcode Analyze 代码静态检查及问题解决

解决方法:去掉初始化方法,直接赋值

instrument之Xcode Analyze 代码静态检查及问题解决 
instrument之Xcode Analyze 代码静态检查及问题解决

注释:另外一种处理方式,使用__unused注释掉

__unused NSMutableArray *array = @[@"1",@"2"];  //使用__unused或者注释掉

3、Logic error 逻辑错误

Converting a pointer value of type 'NSNumber *' to a primitive boolean value;instead,either compare the pointer to nil or call -boolValue(将类型为“NSNumber *”的指针值转换为原始布尔值; 相反,要么将指针与nil进行比较,要么调用-boolValue) 
instrument之Xcode Analyze 代码静态检查及问题解决

问题代码:使用NSNumber作为判断条件的时候,没有指定类型,编译器不知道怎么判断

instrument之Xcode Analyze 代码静态检查及问题解决

解决办法:指定 NSNumber 对象与 nil 进行比较

instrument之Xcode Analyze 代码静态检查及问题解决 
instrument之Xcode Analyze 代码静态检查及问题解决

4、Memory error 内存错误

nil passed to a callee that requires a non-null 1st parameter(nil传递给需要非null第一个参数的被调用者)
instrument之Xcode Analyze 代码静态检查及问题解决

问题代码:param 可能为nil

instrument之Xcode Analyze 代码静态检查及问题解决

解决办法:通常这种情况下,只需要添加一个非空判断,保证传入的参数不为空即可

5、Core Foundation/Objective-C

 问题代码
 
instrument之Xcode Analyze 代码静态检查及问题解决
1. 假设条件不成立
 
instrument之Xcode Analyze 代码静态检查及问题解决
instrument之Xcode Analyze 代码静态检查及问题解决
2. 在未设置为'[(超级或自我)初始化...]的结果时返回“自我”
instrument之Xcode Analyze 代码静态检查及问题解决

解决办法:

  去掉一个“=” 号,或者把 self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 提出来放 if 条件前面

上一篇:ASP.NET结合Redis实现分布式缓存


下一篇:包管理和环境管理软件Anaconda