说明
使用Xcode自带的静态分析工具可以找出代码潜在错误,如内存泄露,未使用函数和变量等
缺点:静态内存分析由于是编译器根据代码进行的判断, 做出的判断不一定会准确, 因此如果遇到提示, 应该去结合代码上文检查一下。
总结: 静态分析一般用于定位内存泄露,未使用的变量与函数,空指针等。一般内存泄漏等问题建议使用动态分析,这里只讲静态分析(Analyze)。
使用方法:
Analyze(静态分析以两种方式呈现,可根据个人爱好选择)
<1> 手动静态分析
工具栏 Product->Analyze(快捷键command+shift+B)
ps:每次分析都要执行一次
<2> 自动静态分析
在TARGETS -> Build Settings 搜索(static analysis) 将Analyze During 'Build' 改为Yes(见图1)
ps:每次编译时都会进行静态分析
遇到的问题:
<1> user-facing text should use localizedstringmacro
面向用户的文本应该使用本地化的字符串宏
解决
在TARGETS -> Build Settings 搜索(missing localizability) 将missing localizability 改为No(见图2)
<2> Converting a pointer value of type 'NSNumber *' to a primitive boolean value;instead,either compare the pointer to nil or call -boolValue
将类型为“NSNumber *”的指针值转换为原始布尔值;相反,要么将指针比较为nil,要么调用-布尔值
解决
根据提示有两种修改方式
1.判断numbers是否等于nil ps:number != nil ;
2.bumber.boolValue
虽然这两种修改方式都能解决问题,但不完全一样,要注意其中的差别,选择需要的使用!
<3> Value stored to 'imagePickerController' during its initialization is never read
意思为imagePickerController这个对象初始化未被用到...因为imagePickerController对象在第一行被init后再第二行又被init一次继而从新开辟了内存!
解决
将初始化合并既可!
<4> Assigned value is garbage or undefined
声明变量的时候没有进行初始化工作
解决
为变量初始化