美文网首页
《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