__attribute__((deprecated))
to gcc way (również supported in clang) oznaczania funkcji/metody jako wycofanej. Kiedy ktoś zostanie oznaczony jako "przestarzały", ostrzeżenie zostanie wygenerowane za każdym razem, gdy ktoś go wywoła.
Składnia normalnych funkcji byłoby
__attribute__((deprecated))
void f(...) {
...
}
// gcc 4.5+/clang
__attribute__((deprecated("g has been deprecated please use g2 instead")))
void g(...) {
...
}
i metod Objective-C będzie
@interface MyClass : NSObject { ... }
-(void)f:(id)x __attribute__((deprecated));
...
@end
Można również zaznaczyć całą klasę jako przestarzałe z
__attribute__((deprecated))
@interface DeprecatedClass : NSObject { ... }
...
@end
Apple również dostarcza nagłówek <AvailabilityMacros.h>
, który udostępnia makra DEPRECATED_ATTRIBUTE i DEPRECATED_MSG_ATTRIBUTE (msg), które rozszerzają się do powyższych atrybutów lub nic, jeśli kompilator nie obsługuje atrybutów. Zauważ, że ten nagłówek nie istnieje poza OS X/iOS.
marginesie, jeśli używasz Swift użyć @available
attribute aby potępiać element, na przykład
@available(*, deprecated=2.0, message="no longer needed")
func f() {
...
}
Dziękuję za szybką odpowiedź, jestem prawie pewien, że to pomoże, szukałem na chwilę przed pytaniem :) – Julien
Mam tylko jedno pytanie: czy jest możliwe, aby dodać wiadomość jak "Użyj metody XXX zamiast"? – Julien
@Julien: Tak: '__attribute ((przestarzałe (użyj zamiast tego metody XXX)))'. Ale ta składnia jest dostępna tylko począwszy od gcc 4.5, a wersja dostarczana z Xcode to 4.2 ... – kennytm