7

在 Cocoa 应用程序中,我想使用条件编译,例如:

#if MACOSX_DEPLOYMENT_TARGET <= MAC_OS_X_VERSION_10_4    
    [[NSFileManager defaultManager] removeFileAtPath:path handler:nil];
#else
    [[NSFileManager defaultManager] removeItemAtPath:path error:NULL];
#endif

我希望这将避免编译器警告有关 removeFileAtPath: 在 MACOSX_DEPLOYMENT_TARGET = 10.6 时被弃用,因为它不应该编译该行。

它不起作用。

当 MACOSX_DEPLOYMENT_TARGET = 10.6 时,我收到警告说 removeFileAtPath: 已弃用。但它不应该编译该行,所以它不应该警告它有一个不推荐使用的方法!

(我在项目构建设置和目标构建设置中都设置了 MACOSX_DEPLOYMENT_TARGET。我将 BASE_SDK 设置为 10.6 并在两者中都指定了 GCC 4.2。)

我究竟做错了什么?我对条件编译有一些基本的误解吗?

4

1 回答 1

11

MACOSX_DEPLOYMENT_TARGET主要用于执行弱链接。您应该改用它MAC_OS_X_VERSION_MIN_REQUIRED来执行条件编译:

#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
    [[NSFileManager defaultManager] removeFileAtPath:path handler:nil];
#else
    [[NSFileManager defaultManager] removeItemAtPath:path error:NULL];
#endif

有关更多示例,请参阅Apple 的确保向后二进制兼容性 - Mac OS X 上的弱链接和可用性宏。

于 2010-12-06T15:44:56.287 回答