如何摆脱Xcode中的“未使用variables”警告?

我明白为什么没有使用的variables警告发生。 我不想一般地压制他们,因为他们在大多数情况下是非常有用的。 但是,请考虑以下(人为)代码。

NSError *error = nil; BOOL saved = [moc save:&error]; NSAssert1(saved, @"Dude!!1! %@!!!", error); 

Xcode报告saved是一个未使用的variables,当然不是。 我怀疑这是因为NSAssert1是一个macros。 NS_BLOCK_ASSERTIONSmacros没有定义,所以Objective C断言是肯定启用的。

虽然它没有伤害任何东西,但是我发现它不整洁,烦人,我想压制它,但我不知道该怎么做。 把variables赋给自己可以摆脱编译器的警告,但是如果存在这样的事情,我宁愿用“正确”的方式来做。

我不确定它是否仍然在新的LLVM编译器中受支持,但是GCC有一个“未使用”属性可以用来抑制这个警告:

 BOOL saved __attribute__((unused)) = [moc save:&error]; 

或者(如果LLVM不支持上述情况),可以将variables声明拆分成单独的一行,保证variables是否被macros“扩展”使用:

 BOOL saved = NO; saved = [moc save:&error]; 

使用Xcode 4.3.2,发现这似乎工作(less写)

 BOOL saved __unused; 

在Xcode中,您可以设置“未使用的variables”的警告。 转到目标的“生成设置”,并用“未使用”

这是一个截图: Builld设置截图

我build议你只修改它的debugging。 这样你就不会错过发布版本的任何东西。

 NSError *error = nil; BOOL saved = [moc save:&error]; NSAssert1(saved, @"Dude!!1! %@!!!", error); #pragma unused(saved) 

像这样尝试。 它正在为我工​​作。 它也适用于你。

唯一简单和便携的方式来标记variables使用是…使用它。

 BOOL saved = ...; (void)saved; // now used 

不过,您可能对已经描述的特定于编译器的扩展感到满意。

尝试使用:__unused属性。 适用于Xcode 5

您可以在“Release”上设置“No” LLVM compliler 2.0警告 在这里输入图像说明

 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-variable" NSUInteger abc; /// Your unused variable #pragma clang diagnostic pop 

资源

使它占用两条线。 分开声明和默认值

 BOOL enabled = NO; // ... BOOL enabled; enabled = NO; 

这就是你在C中执行的方式,因此也是Objective-C。

即使您没有启用警告,将返回值标记为明确忽略也是一个好主意。 这也是为了向其他开发者展示,你不仅忘记了返回值 – 你确实明确地select了忽略它。

 (void)[moc save:&error]; 

编辑:编译器忽略强制转换为void ,所以它不应该影响性能 – 这只是一个很好的干净的人类注释。

如果你想压制Xcode中的所有警告,可以按照以下步骤进行目标 – >编译设置 – > Swift编译器 – 警告策略 – >禁止警告 – >是