静态分析器是一个不需要运行程序就可以从逻辑上检测代码的工具,它可以寻找会演变成bug的错误。
1.1 静态工作
静态分析器在应用程序的代码通道中查找逻辑错误并反馈给你。你可以在构建并运行之前就对它们进行修复。
静态分析器可以认出以下几种错误:
① 安全问题,比如内存泄漏和缓冲区溢出。
② 并发性问题,比如静态条件(也就是依赖时间的两个或多个任务失效)。
③ 逻辑问题,包括废代码和不好的编码习惯。
分析器也有以下不足之处:
① 因为需要消耗时间来进行分析,所以会拖慢构建程序的过程。
② 有时会误报错误。
③ 改变了你熟悉的工作流程,因为你必须要适应它。
1.1.1 开始分析
① 无效变量
无效变量指我们创建了一个对象,但从来没有在代码中直接访问过,没有向它发送消息也没有更改过它。
无效变量分配和释放内存的过程显然会占用时间和内存,所以应当避免。
② 某个对象有内存泄漏的潜在危险。通常指在未释放分配了内存的对象之前就终止程序的运行。
③ 未释放之前创建的对象。
④ 返回前记得释放对象。
1.1.2 协助分析器
为了能让静态分析器工作得更好,可以在你的方法中使用关键字以避免误报。这些关键字能让你告诉分析器:“我知道这里有些奇怪,但我保证我知道我在做什么,所以请不用提醒我。”
① 返回一个保留的对象
你可以使用一个NS_RETURNS_RETAINED来标记一个方法,以返回一个保留计数器的值不是零的对象。
或者使用CF_RETURNS_RETAINED关键字。
② 返回一个不保留的对象
使用关键字NS_RETURNS_NOT_RETAINED和CF_RETURNS_NOT_RETAINED。
③ 不返回对象
可以使用关键字CLANG_ANALYZER_NORETURN。
Clang是一个加强了C编译器并在Xcode中为静态分析器提供基础的开源项目。
1.1.3 了解更多
① 等号错误
② 内存泄漏
无论什么时候停止程序运行,都需要检查是否还存在未释放已分配内存的对象。
③ 过度释放
④ @synchronized语句中的空值
@synchronized(object), 给对象加锁,确保在修改该对象时没有其他对象会访问它。所以,必须确保object对象不是nil。
《Objective-C基础教程》读书笔记13—使用静态分析器
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
- 内存管理内存管理是程序设计中常见的资源管理的一部分。虽然说当程序运行结束时,操作系统将收回其占用的资源,但是只要程...