将Xcode更新到5.1版后,我收到一条警告,告诉我我已定义了一个未使用的常量。其定义如下所示:

static NSInteger const ABCMyInteger = 3;

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

我重构了一些,使三个NSString常量过时了。这三个定义都与上面的NSInteger非常相似:
static NSString *const ABCMyString = @"ABCMyString";

但是,令我惊讶的是,尽管我确定它们已不再使用,但它们并未被标记为“未使用”。

有人可以解释为什么NSInteger确实会被编译器注意到为未使用,而NSString却未被使用吗?

最佳答案

基本变量只是在静态存储器部分中分配并由编译器初始化的存储块。但是,字符串对象是在运行时初始化的变量(可能是在启动时),因此编译器向构造函数添加了隐式调用,并将该变量用作该调用的参数。因此正在使用该变量。

结构的_unused项不是IMHO,不是指令,而只是成员变量,可能为了更好地对齐而添加了它(将对象大小填充为舍入大小)。

关于objective-c - 静态NSInteger使用未使用的变量警告,但NSString不使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22489927/

10-14 21:41
查看更多