使用静态NSInteger的未使用变量警告,但不包含NSString

Sco*_*ets 9 objective-c clang unused-variables

在将Xcode更新到版本5.1后,我收到一条警告,告诉我我已经定义了一个我没有使用的常量.它的定义如下:

static NSInteger const ABCMyInteger = 3;
Run Code Online (Sandbox Code Playgroud)

我很高兴看到它被标记,因为我认为这意味着编译器现在能够检查未使用的常量以及变量本地.

我重构了一些,使三个NSString常量过时了.所有三个都NSInteger与上面的定义非常类似:

static NSString *const ABCMyString = @"ABCMyString";
Run Code Online (Sandbox Code Playgroud)

然而,令我惊讶的是,这些并没有被标记为"未使用",但我确信它们已经不再使用了.

有人可以解释为什么NSInteger编译器会注意到它是未使用的,但是NSString不是吗?

Cia*_*Pan 2

原始变量只是分配在静态内存部分并由编译器初始化的内存块。然而,字符串对象是在运行时(可能在启动时)初始化的变量,因此编译器向构造函数添加隐式调用,并使用该变量作为该调用的参数。所以正在使用该变量。

恕我直言,该_unused结构的项目不是指令,而只是一个成员变量,可能是为了更好的对齐而添加的(将对象大小填充为圆形大小)。