6

有时我声明一个 ivar,但过了一段时间我不再使用它。我想从我的代码中删除这种杂乱无章的东西,但我找不到可以显示我未使用的 ivars 的警告。

是否有 Xcode 的工具或内置功能可以让我找到所有未使用的 ivars?

我看到静态分析器有 CLANG_ANALYZER_OBJC_UNUSED_IVARS,但它似乎没有做任何事情。

@implementation AppDelegate
{
@private
    BOOL _foo; // Never read or written to
}

在 Xcode 5 中运行分析器并将 CLANG_ANALYZER_OBJC_UNUSED_IVARS(未使用的 ivars)设置为 YES 永远不会产生警告。

4

3 回答 3

4

根据相关的 Clang 源代码和一些快速测试,分析器似乎没有查看未中声明@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

我建议提交错误/提交补丁。

于 2014-01-13T23:25:57.083 回答
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 文件中。

于 2014-01-13T23:28:09.353 回答
1

在产品菜单中的 Xcode 中单击分析...它将显示未使用的变量。这还将告诉您有关死代码的信息。

于 2014-01-13T23:10:28.050 回答