objective-c - 如何在 Objective-C 中检测未使用的方法和#import

标签 objective-c xcode methods compiler-warnings

在一个 iPhone 应用程序上工作了很长时间后,我意识到我的代码很脏,包含几个 #import 和根本没有调用或没有用的方法。

我想知道是否有任何编译器指令或方法来检测那些无用的代码行。 Xcode 是否有任何工具可以检测到这一点?

最佳答案

Xcode 允许您(取消)检查特定编译器警告的设置,这些警告可以警告您某些类型的未使用代码。 (在源列表中选择项目,然后选择 File > Get Info,然后选择 Build 选项卡。)这里有一些可能感兴趣的(对我来说是 Clang 和 GCC 4.2):

  • 未使用的函数
  • 未使用的参数
  • 未使用的值

我没有看到任何用于检测未使用的导入的选项,但这有点简单 - 低技术方法只是注释掉导入语句,直到您收到编译错误/警告。

未使用的 Objective-C 方法比未使用的 C 函数更难检测,因为消息是动态分派(dispatch)的。警告或错误可以告诉您存在潜在问题,但缺少警告或错误并不能保证您不会出现运行时错误。


编辑:检测(可能)未使用的方法的另一个好方法是检查实际执行的代码覆盖率。这通常与自动化单元测试一起完成,但并非必须如此。

This blog post是对使用 Xcode 进行单元测试和代码覆盖的一个不错的介绍。 gcov 部分(顺便说一下,仅适用于 GCC 生成的代码)解释了如何让 Xcode 构建可记录执行频率的检测代码.如果你在模拟器中测试你的应用程序构建,然后在其上运行 gcov,你可以看到使用像 CoverStory 这样的工具执行了哪些代码。 (一个相当简单的 GUI)或 lcov (用于创建 HTML 报告的 Perl 脚本)。

我将 gcovlcov 用于 CHDataStructures.framework并自动生成 coverage reports在每个 SVN 提交之后。同样,请记住,将执行覆盖率视为对哪些代码“死”的明确衡量标准是不明智的,但它肯定有助于确定可以进一步调查的方法。

最后,由于您正在尝试删除死代码,我认为您会发现这个 SO 问题也很有趣:

关于objective-c - 如何在 Objective-C 中检测未使用的方法和#import,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1456966/

相关文章:

ios - 如何在 iOS 中以编程方式设置系统音量

ios - NSManagedObject setter 给我 [ MyObject setName :]: unrecognized selector sent to instance

如果证书无效/被吊销,IOS 应用程序将关闭

java - 从 main 中的另一个类方法调用数组

php - 如何使用警报 View 单击按钮来更新 sql 中的值?

iphone - 本地存储还是 SQLite?

ios - 应用内购买 - 可用产品没有 localizedTitle、localizedDescription

iphone - 无法将两个图像合并为一个

c# - 列表过滤变体

Java:返回 String 或 int 的方法