有了这些SDK,可以方便地构建多个SDK和平台,但是,从3.2到3.0,甚至偶尔到2.x,我经常收到一些方法已经改变或被取代的警告:
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
既然我仍然想保持与旧操作系统的兼容性,而且我也在努力消除构建时的“噪音”,有没有办法关闭或禁用这些警告?
fruv7luv1#
由于我还不能给@samiq的帖子添加注解,我想我会扩展它。在函数/方法前面输入提到的指令,在其中你使用了过时的东西。然后你可以在函数定义结束后恢复以前的设置:
#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" - (void) methodUsingDeprecatedStuff { //use deprecated stuff } #pragma GCC diagnostic pop
vngu2lb82#
Clang提供了一个很好的特性,使@manicaesar帖子中的“恢复”步骤独立于初始警告状态:
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" - (void) methodUsingDeprecatedStuff { //use deprecated stuff } #pragma clang diagnostic pop
引用Clang手册:除了GCC的pragma提供的所有功能外,Clang还允许你推送和弹出当前的警告状态,这在编写一个由其他人编译的头文件时特别有用,因为你不知道他们用什么警告标志来编译。
taor4pac3#
尝试-Wno-deprecated-declarations或其在Xcode中的相应设置GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS(专业提示:只需在构建设置中键入“deprecated”即可找到此警告的特定设置)。Xcode的当前版本(例如Xcode 9.2):
-Wno-deprecated-declarations
GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
Xcode的旧版本(例如Xcode 2.x、3.x):
62o28rlo4#
由于我们倾向于支持较旧的操作系统,但请注意我们的警告,我希望有一个更整洁的方式来做到这一点。我把它放在一起,灵感来自一些Mozilla代码:
#define SILENCE_DEPRECATION(expr) \ do { \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \ expr; \ _Pragma("clang diagnostic pop") \ } while(0) #define SILENCE_IOS7_DEPRECATION(expr) SILENCE_DEPRECATION(expr) #define SILENCE_IOS8_DEPRECATION(expr) SILENCE_DEPRECATION(expr)
这允许您执行以下操作:
SILENCE_IOS7_DEPRECATION(return [self sizeWithFont:font constrainedToSize:size]);
它还可以处理代码块:
SILENCE_IOS7_DEPRECATION( view = [[MKPolylineView alloc] initWithPolyline:self]; view.lineWidth = self.lineWidth; view.strokeColor = self.color; );
此外,当您删除对iOS 7之前的设备的支持时,您可以轻松地搜索代码,找到要修复的过时用法。
dm7nw8vv5#
您还可以使用以下命令禁止显示每个文件的警告
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
这反过来又使它成为一个更好的做法,而不是仅仅抑制所有的警告一次和一起...毕竟你要知道你这样做是为了什么。
dohp0rv56#
如果要使警告实现不推荐使用的方法或实现不推荐使用的类静音,请用途:
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-implementations" // code #pragma clang diagnostic pop
kqqjbcuj7#
在构建设置中,找到Deprecated Functions。
Deprecated Functions
byqmnocz8#
如果你想全面检查一段代码中的所有类型的弃用,请使用 -Wdeprecated 标志,如下所示:
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated" - (void) methodUsingDeprecatedStuff { //use deprecated stuff } #pragma clang diagnostic pop
k5hmc34c9#
要禁用来自第三方头文件的警告,请在文件顶部添加以下行
#pragma clang system_header
9条答案
按热度按时间fruv7luv1#
由于我还不能给@samiq的帖子添加注解,我想我会扩展它。在函数/方法前面输入提到的指令,在其中你使用了过时的东西。然后你可以在函数定义结束后恢复以前的设置:
vngu2lb82#
Clang提供了一个很好的特性,使@manicaesar帖子中的“恢复”步骤独立于初始警告状态:
引用Clang手册:
除了GCC的pragma提供的所有功能外,Clang还允许你推送和弹出当前的警告状态,这在编写一个由其他人编译的头文件时特别有用,因为你不知道他们用什么警告标志来编译。
taor4pac3#
尝试
-Wno-deprecated-declarations
或其在Xcode中的相应设置GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
(专业提示:只需在构建设置中键入“deprecated”即可找到此警告的特定设置)。Xcode的当前版本(例如Xcode 9.2):
Xcode的旧版本(例如Xcode 2.x、3.x):
62o28rlo4#
由于我们倾向于支持较旧的操作系统,但请注意我们的警告,我希望有一个更整洁的方式来做到这一点。我把它放在一起,灵感来自一些Mozilla代码:
这允许您执行以下操作:
它还可以处理代码块:
此外,当您删除对iOS 7之前的设备的支持时,您可以轻松地搜索代码,找到要修复的过时用法。
dm7nw8vv5#
您还可以使用以下命令禁止显示每个文件的警告
这反过来又使它成为一个更好的做法,而不是仅仅抑制所有的警告一次和一起...毕竟你要知道你这样做是为了什么。
dohp0rv56#
如果要使警告实现不推荐使用的方法或实现不推荐使用的类静音,请用途:
kqqjbcuj7#
在构建设置中,找到
Deprecated Functions
。byqmnocz8#
如果你想全面检查一段代码中的所有类型的弃用,请使用 -Wdeprecated 标志,如下所示:
k5hmc34c9#
要禁用来自第三方头文件的警告,请在文件顶部添加以下行