美文网首页
《Objective-C基础教程》读书笔记13—使用静态分析器

《Objective-C基础教程》读书笔记13—使用静态分析器

作者: 天山雪莲_38324 | 来源:发表于2018-10-26 23:46 被阅读3次

静态分析器是一个不需要运行程序就可以从逻辑上检测代码的工具,它可以寻找会演变成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—使用静态分析器

      本文链接:https://www.haomeiwen.com/subject/fkkrtqtx.html