__attribute__((deprecated))
jest sposobem gcc (także obsługiwanym w clang ) oznaczania funkcji / metody jako przestarzałej. Gdy ktoś zostanie oznaczony jako „przestarzały”, za każdym razem, gdy ktoś go wywoła, zostanie wyświetlone ostrzeżenie.
Składnia normalnych funkcji byłaby następująca
__attribute__((deprecated))
void f(...) {
...
}
__attribute__((deprecated("g has been deprecated please use g2 instead")))
void g(...) {
...
}
a metody Cel-C
@interface MyClass : NSObject { ... }
-(void)f:(id)x __attribute__((deprecated));
...
@end
Możesz również oznaczyć całą klasę jako przestarzałą za pomocą
__attribute__((deprecated))
@interface DeprecatedClass : NSObject { ... }
...
@end
Firma Apple dostarcza również <AvailabilityMacros.h>
nagłówek, który zawiera makra DEPRECATED_ATTRIBUTE i DEPRECATED_MSG_ATTRIBUTE (msg), które rozwijają się do powyższych atrybutów lub nic, jeśli kompilator nie obsługuje atrybutów. Zwróć uwagę, że ten nagłówek nie istnieje poza systemem OS X / iOS.
Uwaga dodatkowa, jeśli używasz Swift, używasz @available
atrybutu do wycofania elementu, np
@available(*, deprecated=2.0, message="no longer needed")
func f() {
...
}
__attribute((deprecated(use method XXX instead)))
. Ale ta składnia jest dostępna tylko od gcc 4.5, a wersja dostarczana z Xcode to 4.2 ...DEPRECATED_ATTRIBUTE
Możesz także użyć bardziej czytelnej definicji
DEPRECATED_ATTRIBUTE
Zdefiniowano w
usr/include/AvailabilityMacros.h
:#define DEPRECATED_ATTRIBUTE __attribute__((deprecated)) #define DEPRECATED_MSG_ATTRIBUTE(msg) __attribute((deprecated((msg))))
Przykład metod obiektywnych-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
Możesz też oznaczyć całą klasę jako przestarzałą:
DEPRECATED_ATTRIBUTE @interface DeprecatedClass : NSObject { ... } ... @end
źródło
DEPRECATED_MSG_ATTRIBUTE
oznaczyć klasę jako przestarzałą za pomocą wiadomości (jak UIAlertView)Swift 5.0
Wycofaj wszelkie metody / klasy / struktury / protokoły przy użyciu
@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.")
Możliwe parametry:
Więcej informacji można znaleźć w dokumencie Apple Doc: Attributes
źródło
Jeśli używasz C ++ 14 w swoim projekcie xcode, możesz również użyć atrybutu
[[deprecated]]
lub,[[deprecated("reason")]]
który jest teraz częścią języka.patrz dokumentacja: http://en.cppreference.com/w/cpp/language/attributes
źródło
- DLA KODU SWIFT:
Umieść to tuż nad metodą:
@available(*, deprecated: <#Version#>, message: <#Message#>)
przykład:
@available(*, deprecated: 11, message: "Use color assets instead") public struct ColorPaletteItemResource: ColorPaletteItemResourceType { ... }
źródło