如何在Xcode中找到未使用的ivars

时间:2014-01-13 22:59:06

标签: objective-c xcode ivar

有时我会宣布一个静脉注射,但过了一段时间我不再使用它了。我想从我的代码中删除这种瑕疵,但我找不到警告,告诉我我未使用过的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中的分析器从不产生警告。

3 个答案:

答案 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文件中。