在Xcode中我们经常会写如下代码
if ([someObject respondsToSelector:@selector(doSomething)])
{
[someObject performSelector:@selector(doSomething)];
}
以上代码中,如果我们不显示的在someObject 的头文件中显式地声明 doSomething或者实现doSomething,则在 Xcode 中会提示警告:
Undeclared selector 'doSomething'
但很多情况下我们并不想去声明它,此时我们可以禁用编译器的此类警告:
1.在该文件中声明:\#pragma GCC diagnostic ignored "-Wundeclared-selector"
则该行之后本文件中所有的此类警告将不在显示。而编译器依然会对文件内其他代码进行警告检测,避免出现预料之外的bug。
2.只针对某几行代码忽略该警告:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
// 需要禁用警告的代码
if ([self respondsToSelector:@selector(doSomething)])
{
[self performSelector:@selector(doSomething)];
}
#pragma clang diagnostic pop
3.整个工程忽略该警告
在工程的build Setting -> undeclared selector 设置为NO。
从此,整个世界安静了。