我在运行时选择最新的应用程序接口来支持10.4+:
if ([fileManager respondsToSelector:@selector(removeItemAtPath:error:)])
[fileManager removeItemAtPath:downloadDir error:NULL];
else
[fileManager removeFileAtPath:downloadDir handler:nil];
warning: 'removeFileAtPath:handler:' is deprecated [-Wdeprecated-declarations]
是否有if([… respondsToSelector:@selector(…)]){ … } else { … }
的语法提示编译器(Clang)不警告该行?
如果不是,有没有一种方法可以标记要忽略-Wdeprecated-declarations
行
在看到一些答案之后,让我澄清一下,让编译器混淆成不知道我在做什么不是一个有效的解决方案。
发布于 2009-12-15 00:54:14
我在Clang编译器用户手册中找到了an example,它让我忽略了这个警告:
if ([fileManager respondsToSelector:@selector(removeItemAtPath:error:)]) {
[fileManager removeItemAtPath:downloadDir error:NULL];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[fileManager removeFileAtPath:downloadDir handler:nil];
#pragma clang diagnostic pop
}
发布于 2009-12-15 00:57:58
您可以声明一个单独的文件,该文件指定用于调用不推荐使用的方法,并在Xcode中设置每个文件的编译器标志以忽略-Wdeprecated-declarations
。然后,您可以在该文件中定义一个伪函数来调用不推荐使用的方法,从而避免在真实的源文件中出现警告。
发布于 2009-12-15 01:35:29
我不确定clang是否足够智能地捕捉到这一点,但如果不是,您可以尝试使用performSelector:withObject:withObject:
或构建并调用NSInvocation对象。
https://stackoverflow.com/questions/1902021
复制相似问题