首页 > 解决方案 > 为什么发布版本比调试更严格

问题描述

在这行代码中:

NSInteger 答案 = 3; NSString *s = [NSString stringWithFormat:@"%ld",answer];

在 Xcode 10.3 中,在调试版本下没有错误。在发布版本下,我收到此错误:

'NSInteger' 类型的值不应用作格式参数;将显式转​​换添加到“long”而不是 [-Werror,-Wformat]

我理解错误的原因,我也应该将答案转换为 (long),如果我以 @"%d" 开头,编译器会抱怨并解决问题。但是当 ld 在那里时,调试版本中的编译器会保持安静,但在发布时它会引发一个标志。

关于什么设置会导致这种情况发生的任何想法?

提前致谢!

标签: objective-cxcodegccgcc-warning

解决方案


您的问题的答案非常广泛,但我认为您应该有所了解。就像上面的评论一样,有很多因素可以过滤在构建调试和构建生产发布时将要采取的更改。对于性能和兼容性,苹果对发布非常严格。因此,构建设置中某些构建配置的默认值与构建用于调试和发布有很大不同。

看看下面附上的图片:

在此处输入图像描述

在此处输入图像描述

注意:它们中的大多数可以根据您的喜好进行定制,但它确实会影响构建过程以及交付!


推荐阅读