这谁写的代码,循环引用了导致内存无法释放?死循环耗死CPU了?算法太耗时导致CPU暴增?。。。写代码的时候这种种问题,虽然依靠代码规范、自测自检、互相审核代码能够解决一部分问题,但是这些隐蔽的难于发现却很致命的问题确时常发生。
有没有一款工具能帮助开发者自动检查这类人工难发现的关键问题,答案是肯定的。Xcode 自带的静态分析工具 Analyze,通过静态语法分析能够找出在代码层面就能发现的内存泄露问题,还可以通过上下文分析出是否存在变量无用等问题。但是,Analyze 的功能还是有限,还是无法帮助我们在编写代码的阶段发现更多的问题。所以,这才诞生出了功能更全、定制化高、效率高的第三方静态检查工具。比如,OCLint、Infer、Clang、SwiftLint 静态分析器等。
可以帮助我们度量是否需要优化和重构代码。
这两个缺陷是由于工具本身的局限性决定的,用的时候需要开发者去平衡利弊,找到最合适自己的方式来提高开发效率。
打起精神来,干货来了。
OCLint 是基于 Clang Tooling 开发的静态分析工具,主要用来发现编译器检查不到的那些潜在的关键技术问题。2017 年 9 月份新发布的 OCLint 0.13 版本中,包含了 71 条规则。这些规则已经基本覆盖了具有通用性的规则,主要包括语法上的基础规则、Cocoa 库相关规则、一些约定俗成的规则、各种空语句检查、是否按新语法改写的检查、命名上长变量名短变量名检查、无用的语句变量和参数的检查。除此之外,还包括了和代码量大小是否合理相关的一些规则,比如过大的类、类里方法是否太多、参数是否过多、Block 嵌套是否太深、方法里代码是否过多、圈复杂度的检查等。你可以在官方规则索引中,查看完整的规则说明。
// 设置 brew 的第三方仓库
brew tap oclint/formulae
// 安装 OCLint
brew install oclint
// 使用 OCLint 来检查下前面编写的 Hello.m
oclint Hello.m
// 将检查结果生成为一个 HTML 格式的报告
oclint -report-type html -o report.html Hello.m
Clang 静态分析器(Clang Static Analyzer)是一个用 C++ 开发的,用来分析 C、C++ 和 Objective-C 的开源工具,是 Clang 项目的一部分,构建在 Clang 和 LLVM 之上。Clang 静态分析器的分析引擎用的就是 Clang 的库。
Clang 静态分析器专门为速度做过优化,可以在保证查出错误的前提下,使用更聪明的算法减少检查的工作量。你可以点击这里下载Clang 静态分析器,然后解压就可以了,不需要放到特定目录下。而卸载它的话,删除这个解压后的目录即可。在 Clang 静态分析器中,常用的就是 scan-build 和 scan-view 这两个工具。