すべてのSDKが浮かんでいるので、複数のSDKとプラットフォーム用にビルドできると便利です。ただし、3.2から3.0にバウンスしたり、ときどき2.xになったりすると、変更または置き換えられたメソッドに関する非推奨の警告が頻繁に表示されます。
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
私はまだ古いOSとの互換性を維持したいので、ビルド時に「ノイズ」を除去しようとしていますが、これらの警告をオフまたは無効にする方法はありますか?
私はまだ@samiqの投稿にコメントを追加できないので、それを拡張すると思います。非推奨のものを使用する関数/メソッドの前に、上記のディレクティブを入力します。次に、関数終了の定義後に以前の設定を復元できます。
#pragma GCC diagnostic Push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
//use deprecated stuff
}
#pragma GCC diagnostic pop
Clangには、@ manicaesarポストの「復元」ステップを初期警告状態とは無関係にするニース機能があります。
#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (void) methodUsingDeprecatedStuff {
//use deprecated stuff
}
#pragma clang diagnostic pop
Clangを引用するには manual :
GCCのプラグマによって提供されるすべての機能に加えて、Clangでは現在の警告状態をプッシュおよびポップすることもできます。これは、他の人がコンパイルする警告フラグがわからないため、他の人がコンパイルするヘッダーファイルを作成するときに特に便利です。
古いOSをサポートする必要がある傾向がありますが、警告に注意を払うので、これを行うための整然とした方法が必要でした。いくつかの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より前のデバイスのサポートをドロップすると、コードを簡単に検索して、修正すべき非推奨の使用法を見つけることができます。
また、ファイルごとに警告を抑制することもできます
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
これにより、すべての警告を一度にまとめて抑制するよりも、少し良い練習になります。
警告を黙らせる場合非推奨メソッドの実装または非推奨クラスの実装、使用:
#pragma clang診断Push #pragma clang診断は無視されます "-Wdeprecated-implementations" // code #pragma clang診断pop
コード全体であらゆる種類の廃止予定を包括的に確認したい場合。以下のような-Wdeprecatedフラグを使用してください。
#pragma clang diagnostic Push
#pragma clang diagnostic ignored "-Wdeprecated"
- (void) methodUsingDeprecatedStuff {
//use deprecated stuff
}
#pragma clang diagnostic pop