Ответ 1
Попробуйте -Wno-deprecated-declarations
или его соответствующую настройку в Xcode, GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
:
При всплытии всех SDK, которые могут быть созданы для нескольких SDK и платформ. Однако, отскакивая от 3.2 до 3.0 и даже изредка 2.x, я часто получаю устаревшие предупреждения с использованием методов, которые изменились или были заменены:
warning: 'UIKeyboardBoundsUserInfoKey' is deprecated.
Так как я все еще хочу поддерживать совместимость со старыми ОС, и я также стараюсь удалить "шум" при создании, есть ли способ отключить или отключить эти предупреждения?
Попробуйте -Wno-deprecated-declarations
или его соответствующую настройку в Xcode, GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS
:
Так как я еще не могу добавить комментарий к сообщению @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 также позволяет вам нажимать и вызывать текущее состояние предупреждения. Это особенно полезно при написании файла заголовка, который будет скомпилирован другими людьми, потому что вы не знаете, какие предупреждающие флаги они строят с помощью.
Поскольку мы, как правило, нуждаемся в поддержке старых ОС, но обратите внимание на наши предупреждения, я хотел бы более аккуратный способ сделать это. Я положил это вместе, вдохновленный некоторым кодом 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;
);
Кроме того, когда вы отказываетесь от поддержки устройств pre-iOS 7, вы можете легко выполнить поиск кода, чтобы найти устаревшие способы исправления.
Вы также можете подавлять предупреждения для каждого файла с помощью
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
что в свою очередь делает его немного лучше, чем просто подавлять все предупреждения один раз и вместе... ведь вы узнали, для чего вы это делаете.
В настройках сборки найдите Deprecated Functions
.
Чтобы отключить предупреждение из файла заголовка третьей стороны, добавьте следующую строку вверху файла
#pragma clang system_header