【问题标题】:Cleaning up Objective-C code清理 Objective-C 代码
【发布时间】:2010-11-22 16:12:54
【问题描述】:

在处理复杂问题时,我发现自己尝试了各种解决方案,并且在尽最大努力保持井井有条的同时,代码可能会变得非常混乱。对象可能会更改并且不再使用,而其他时候我可能会添加一些最终不会被程序使用但占用空间和可能内存的代码。

除了仔细阅读程序之外,有没有办法找到程序不使用的代码块?

您发现了哪些清理程序的技巧?

我发现用于检查 .h 文件中的对象是否仍在应用程序中使用以及检查它们是否被正确释放/释放的一个小技巧是使用“搜索全部”功能 (cmd-shift-F) 和按对象名称搜索

【问题讨论】:

  • 我一直面临着同样的挑战,因为 xcode 的重构支持很差。我正在尝试的一件事是使用可可绑定并获得一些单元测试覆盖率,所以我觉得更安全

标签: iphone objective-c memory-management


【解决方案1】:

这是一篇关于在应用程序中报告代码覆盖率的几种方法的文章:

http://seriot.ch/blog.php?article=20080728

它面向 Mac 应用程序,但也主要适用于 iPhone 的东西(DTrace 你只能在模拟器中使用)

正如文章所指出的,这在 Objective-C 中比其他语言更难,因为它很容易拥有一个由 performSelector 调用的方法,即使调用静态分析也会报告为死代码(是的,你也可以在 Java 中做类似的事情,但很少做)。

可能 gcc 警告标志是最好的主意,同时仔细检查它认为是未调用的方法。实际上在应用程序中运行每个可能的代码路径实际上非常困难,但如果您有一组较小的可能函数要删除,至少您可以更快地做出选择,这样您就不必测试每条路径......

编辑:我可能应该明确指出,代码覆盖率是一种可以用来查找“死”代码的技术,这就是你所追求的

EDIT2:链接已死!我找不到缓存的版本,而且我记不太清了,无法总结更多关于它包含的内容。

【讨论】:

  • 链接不再包含文章。
  • 老鼠!我寻找缓存版本,但什么也找不到。感谢您注意到这一点。
【解决方案2】:

使用源代码管理是一个很大的帮助,因为在乱搞之后,您可以比较源代码以查看更改 - 非常适合查找调试 NSLog 和您忘记添加的其他快速 hack。

使用您可以找到的标记标记临时代码也是一个好主意。我倾向于标记我尚未使用 NYI 完成的任何代码。例如,如果我添加了一个 IBAction,但还没有写,我让它做 NSLog(@"myaction NYI")。在开发过程中,我偶尔会在项目中搜索 NYI,看看是否有我忘记实施的项目。我用“// NYI delete”标记的临时或破解调试代码,所以我会记得回来删除它。

为了删除未使用的代码,我最近编写了一个脚本:检查所有内容是否已签入以及是否干净构建,然后检查项目中的所有 .h 文件并清空它及其关联的 .c/.cpp/。 m/.mm 文件,然后进行测试构建。如果它仍然构建,它继续,否则它恢复该文件并继续到下一个头文件。脚本完成后,我检查了颠覆状态,看看它认为我可以删除哪些文件。我还必须避免使用资源使用的任何文件。效果很好。

我想编写一个脚本来遍历所有文件并删除每个#include/#import 行并检查它是否仍然编译以清除所有多余的包含,但我还没有解决这个问题。

【讨论】:

    【解决方案3】:

    我知道这很难,但是如果您希望您的代码在完成所有“测试不同的解决方案”时保持质量,恐怕您必须确保始终评论和/或删除您不需要的代码随你去。

    如果你仔细想想,这是有道理的。如果您继续更改和重命名事物,那么您要么必须随时清理它,要么在最后清理它。这是一个很难进入的练习,但要么这样做,要么在最后清理。

    通常如果你把它留到最后,那么开始一个新项目并复制有用的部分可能会更容易。

    【讨论】:

      【解决方案4】:

      Xcode 中的Snapshots 功能怎么样?似乎如果您不长期保留各种分支机构,那么这就是要走的路。一次只关注一个功能,让它工作并适合签入。如果您有需要保留的东西,请签入您的源存储库。否则快照消失并根据需要回滚。如果您真的关心简短的 sn-ps 代码,请保留一个代码 sn-ps 库的文本文件。可能会为每个 sn-p 添加注释标题以供以后搜索。

      【讨论】:

        【解决方案5】:

        我知道这不是您要寻找的答案,但使用源代码管理可能是处理这些情况的最佳方法。当您要进行一些重大重构或尝试一些棘手的事情时,只需创建一个分支,然后将其合并或丢弃。

        【讨论】:

          【解决方案6】:

          我有时会发现我团队中的开发人员会删除他们不再需要的类的引用,而不是文件本身。我经常去“添加现有文件”操作,浏览文件选择器并使用单独的 Finder 窗口删除“非灰色”孤立源文件。

          【讨论】:

          • 是的,另一个问题是将文件组织在查找器中的项目文件夹中。这是一个很好的提示。
          【解决方案7】:

          虽然对于查找未使用的代码块不一定有帮助,但我发现clang 对清理代码和发现潜在问题非常有用。还有一个不错的front-end 可用。

          【讨论】:

          • 值得记住的是,从 3.2 版开始,Clang 已与 XCode 集成,该版本将于 8 月 28 日星期五广泛使用。
          猜你喜欢
          • 2021-04-11
          • 2011-06-01
          • 2010-10-11
          • 1970-01-01
          • 2014-03-21
          • 2010-11-10
          • 1970-01-01
          • 2012-05-21
          • 1970-01-01
          相关资源
          最近更新 更多