有时我会宣布一个静脉注射,但过了一段时间我不再使用它了。我想从我的代码中删除这种瑕疵,但我找不到警告,告诉我我未使用过的ivars。
是否有Xcode的工具或内置功能可以让我找到所有未使用过的ivars?
我看到静态分析器有CLANG_ANALYZER_OBJC_UNUSED_IVARS,但似乎没有做任何事情。
@implementation AppDelegate
{
@private
BOOL _foo; // Never read or written to
}
在设置为YES的CLANG_ANALYZER_OBJC_UNUSED_IVARS(未使用的ivars)中运行Xcode 5中的分析器从不产生警告。
答案 0 :(得分:4)
根据the relevant Clang source code和一些快速测试,分析师似乎没有查看@interface
中声明的 的ivars和标记为@private
。
@interface Igloo : NSObject
{
NSString * address; // No warning
@private
NSInteger radius; // Warning
}
@end
@implementation Igloo
{
NSInteger numWindows; // No warning
@private // Has no real effect, of course; just testing
NSString * doormatText; // No warning
}
@end
我建议提交错误/提交补丁。
答案 1 :(得分:1)
在产品菜单的Xcode中点击分析...它会显示未使用的变量。这也会告诉你死代码。
答案 2 :(得分:1)
似乎只有在头文件中声明了ivar时,静态分析器选项才有效。
这会正确生成分析仪警告:
// AppDelegate.h
@interface AppDelegate : NSObject <UIApplicationDelegate>
{
BOOL _foo; // never read or written
}
@end
这些都不会产生任何类型的分析器警告:
// AppDelegate.m
@interface AppDelegate ()
{
@private
BOOL _goo; // never read or written
}
@end
@implementation AppDelegate
{
@private
BOOL _hoo; // never read or written
}
@end
因此,如果要检查未使用的ivars,您似乎无法使用现代语法将ivars保留在.m文件中。