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のMacOSXでの下位バイナリ互換性の確保-弱いリンクと可用性マクロを参照してください。

于 2010-12-06T15:44:56.287 に答える