首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSAssert中使用的变量的未使用变量警告

NSAssert中使用的变量的未使用变量警告
EN

Stack Overflow用户
提问于 2016-01-18 12:12:13
回答 2查看 770关注 0票数 3

我有一段只在NSAssert语句中使用的带有几个变量的代码。它们检查调试构建更严格执行的方法参数上的某些前提条件。下面是一个示例:

代码语言:javascript
复制
NSString *videoCodec = [outputSettings objectForKey:AVVideoCodecKey];
NSNumber *width = [outputSettings objectForKey:AVVideoWidthKey];
NSNumber *height = [outputSettings objectForKey:AVVideoHeightKey];

NSAssert(videoCodec && width && height, @"OutputSettings is missing required parameters.");

NSAssert在构建过程中被编译出来,导致编译器发出“未使用的变量”警告。请注意,只有在进行发布构建时才会出现此警告。

我知道这种用法是有效和安全的,但是我如何才能让编译器知道它不会生成错误的消息呢?

EN

回答 2

Stack Overflow用户

发布于 2016-01-18 12:16:08

我找到了解决方案,当我看到相同的解决方案已经在这个库的开发版本中时,我进一步确认了它。

编译器警告可以在具有“未使用”属性的基础上逐个变量地消除。"cdefs.h“包含在iOS中,并且应该在OS-X中,它包含了一个方便的定义,指出了here#define __unused __attribute__((__unused__))

生成的代码如下所示:

代码语言:javascript
复制
__unused NSString *videoCodec = [outputSettings objectForKey:AVVideoCodecKey];
__unused NSNumber *width = [outputSettings objectForKey:AVVideoWidthKey];
__unused NSNumber *height = [outputSettings objectForKey:AVVideoHeightKey];

NSAssert(videoCodec && width && height, @"OutputSettings is missing required parameters.");

或者,如果可以在不使用中间变量的情况下重写NSAssert语句,并且不会丢失清晰度,这也是一种可接受的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2016-01-18 12:14:55

release构建时,NSAssert会解析为空宏,因此,如果变量仅用于断言目的,则会收到警告。

您可以将调试块嵌入到#ifdef DEBUG中(假设您的DEBUG配置定义了此宏),以消除警告。

编辑实际上,在release中构建时,宏不为空,但它不使用传递的参数:

代码语言:javascript
复制
#define NSAssert(condition, desc, ...) do {} while (0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34847216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档