__attribute__((deprecated))
- это способ gcc (также поддерживаемый в clang ) пометки функции / метода как устаревшего. Если один из них отмечен как «устаревший», каждый раз, когда кто-либо его вызывает, будет выдаваться предупреждение.
Синтаксис для обычных функций будет
__attribute__((deprecated))
void f(...) {
...
}
__attribute__((deprecated("g has been deprecated please use g2 instead")))
void g(...) {
...
}
а метод Objective-C будет
@interface MyClass : NSObject { ... }
-(void)f:(id)x __attribute__((deprecated));
...
@end
Вы также можете пометить весь класс как устаревший с помощью
__attribute__((deprecated))
@interface DeprecatedClass : NSObject { ... }
...
@end
Apple также предоставляет <AvailabilityMacros.h>
заголовок, который предоставляет макросы DEPRECATED_ATTRIBUTE и DEPRECATED_MSG_ATTRIBUTE (msg), которые расширяются до указанных выше атрибутов, или ничего, если компилятор не поддерживает атрибуты. Обратите внимание, что этот заголовок не существует вне OS X / iOS.
Боковое примечание: если вы используете Swift, вы используете @available
атрибут, чтобы не рекомендовать элемент, например
@available(*, deprecated=2.0, message="no longer needed")
func f() {
...
}
__attribute((deprecated(use method XXX instead)))
. Но этот синтаксис доступен только начиная с gcc 4.5, а версия, поставляемая с Xcode, - это 4.2 ...DEPRECATED_ATTRIBUTE
Вы также можете использовать более читаемое определение
DEPRECATED_ATTRIBUTE
Он определен в
usr/include/AvailabilityMacros.h
:#define DEPRECATED_ATTRIBUTE __attribute__((deprecated)) #define DEPRECATED_MSG_ATTRIBUTE(msg) __attribute((deprecated((msg))))
Пример методов Objective-C :
@interface MyClass : NSObject { ... } -(void)foo:(id)x DEPRECATED_ATTRIBUTE; // If you want to specify deprecated message: -(void)bar:(id)x DEPRECATED_MSG_ATTRIBUTE("Use baz: method instead."); ... @end
Вы также можете пометить весь класс как устаревший:
DEPRECATED_ATTRIBUTE @interface DeprecatedClass : NSObject { ... } ... @end
источник
DEPRECATED_MSG_ATTRIBUTE
чтобы пометить класс как устаревший с сообщением (например, UIAlertView)Swift 5.0
Устарели любые методы / классы / структуры / протоколы с использованием
@available
@available(*, deprecated, message: "Parse your data by hand instead") func parseData() { } @available(*, deprecated, renamed: "loadData") func fetchData() { } @available(swift, obsoleted: 4.1, renamed: "attemptConnection") func testConnection() { } @available(swift, deprecated: 4.0, obsoleted: 5.0, message: "This will be removed in v5.0; please migrate to a different API.")
Возможные параметры:
Для получения дополнительной информации см. Документ Apple: Атрибуты
источник
Если вы используете C ++ 14 в своем проекте xcode, вы также можете использовать атрибут
[[deprecated]]
или,[[deprecated("reason")]]
который теперь является частью языка.см. документацию: http://en.cppreference.com/w/cpp/language/attributes
источник
- ДЛЯ SWIFT КОДА:
Поместите это прямо над методом:
@available(*, deprecated: <#Version#>, message: <#Message#>)
пример:
@available(*, deprecated: 11, message: "Use color assets instead") public struct ColorPaletteItemResource: ColorPaletteItemResourceType { ... }
источник