Hec*_*ret 98 methods xcode objective-c compiler-warnings
在iPhone应用程序上工作了很长时间后,我意识到我的代码非常脏,包含几个#import和方法,这些方法根本没有被调用或有用.
我想知道是否有任何编译器指令或方法来检测那些无用的代码行.Xcode有没有任何工具可以检测到这个?
Qui*_*lor 66
Xcode允许您(取消)检查特定编译器警告的设置,这些警告可以警告您某些类型的未使用代码.(在源列表中选择项目,然后选择文件>获取信息,然后选择构建选项卡.)以下是一些可能感兴趣的(适用于Clang和GCC 4.2).
我没有看到任何检测未使用的导入的选项,但这有点简单 - 低技术方法只是注释掉import语句,直到你得到编译错误/警告.
未使用的Objective-C方法比未使用的C函数更难以检测,因为消息是动态分派的.警告或错误可能会告诉您存在潜在问题,但缺少警告或错误并不能保证您不会遇到运行时错误.
编辑:另一种检测(可能)未使用的方法的好方法是检查实际执行中的代码覆盖率.这通常与自动化单元测试一起完成,但不一定如此.
这篇博文是使用Xcode进行单元测试和代码覆盖的一个不错的介绍.接下来的部分gcov(仅适用于GCC生成的代码)解释了如何让Xcode构建可以记录执行频率的检测代码.如果您在模拟器中进行应用程序的检测构建,然后在其上运行gcov,您可以使用CoverStory(相当简单的GUI)或lcov(Perl脚本创建HTML报告)等工具查看执行了哪些代码.
我在每个SVN提交后使用gcov和lcov用于CHDataStructures.framework并自动生成覆盖报告.同样,请记住,将执行的覆盖率视为对"死"代码的明确衡量标准是不明智的,但它肯定有助于确定可以进一步调查的方法.
最后,既然你试图删除死代码,我想你会发现这个问题也很有趣:
我最近编写了一个脚本来查找未使用的(或重复的)#import语句:https://gist.github.com/Orangenhain/7691314
该脚本采用一个ObjC .m文件,并开始#import依次注释掉每一行,看看该项目是否仍然编译.您将不得不更改BUILD_DIR和BUILD_CMD.
如果您使用find命令让脚本在多个文件上运行,请确保使用实际使用所有这些文件的BUILD_CMD (或者您将看到包含大量未使用的import语句的文件).
我写这篇文章时不知道AppCode有类似的功能,但是当我测试AppCode时,它并不像这个脚本那么彻底(但是对于整个项目来说速度更快).
正如paddydub所说,AppCode在这方面做得很好。我试过了,只花了我 10 分钟:
前往Code > Optimize Imports...,或^ + ? + O
这是描述如何执行此操作的视频:检测 AppCode 中未使用的导入和方法
| 归档时间: |
|
| 查看次数: |
40441 次 |
| 最近记录: |