objective-c - 静态 NSInteger 未使用的变量警告,但 NSString 没有

标签 objective-c clang unused-variables

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

static NSInteger const ABCMyInteger = 3;

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

我重构了一些,使三个 NSString 常量过时了。这三个的定义与上面的 NSInteger 非常相似:

static NSString *const ABCMyString = @"ABCMyString";

然而,令我惊讶的是,这些并没有被标记为“未使用”,尽管我确信它们不再被使用。

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

最佳答案

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

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

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

相关文章:

iphone - UIView 不尊重 UINavigationController 中 'loadView' 中的框架

ios - 识别 iOS 10 中的隐私侵犯

c++ - LLVM异常处理错误

c - 删除未使用的变量会导致代码崩溃

python - Python 中的 Prolog 单例变量

c++ - 有什么方法可以在 make 命令中找到未使用的定义和结构

iphone - 这个if语句怎么触发呢?

c++ - 简历合格的引用

c++ - gcc used 属性的用例是什么?

ios - 在 iOS 中,如果不在 View Controller 中,应该在哪里创建对象