为什么发布版本比调试更严格

时间:2019-10-09 20:41:24

标签: objective-c xcode gcc gcc-warning

在这一行代码中:

  

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

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

  

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

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

有什么想法会导致这种情况发生?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的问题的答案相当广泛,但我认为您应该有个主意。像上面的评论一样,有很多因素可以过滤在构建调试版本和生产发布版本时要进行的更改。为了性能和兼容性,Apple对发行版非常严格。因此,“构建”设置中某些构建配置的默认值与“用于调试和发布的构建”非常不同。

看看下面所附的图片:

enter image description here

enter image description here

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