44 Stimmen

Wie kennzeichne ich eine Funktion als veraltet in einer iOS Objective-C-Header-Datei?

Wie kennzeichne ich eine Funktion als veraltet in einer iOS Objective-C-Header-Datei?

Ich vermute, es ist nur ein Schlüsselwort, das ich nach der Funktion irgendwo einfügen kann?

Ich möchte, dass eine Compiler-Warnung generiert wird, wenn jemand versucht, die veraltete Funktion zu verwenden, ähnlich dem Verhalten in Apples APIs.

0 Stimmen

Hey gs - guter Kommentar. Das habe ich auch gerade gedacht!

62voto

Tim Punkte 58529

Versuchen Sie, ein Attribut an Ihre Methodendeklaration anzuhängen:

- (void)fooBar __attribute__ ((deprecated));

Entnommen aus ici .

1 Stimmen

Sieht nach einer ziemlich hässlichen Syntax aus - aber wenn sie funktioniert, dann funktioniert sie! Danke Tim.

3 Stimmen

Sie können #define DEPRECATED _____attribute_____ ((deprecated))

16 Stimmen

- (void)fooBar DEPRECATED_ATTRIBUTE; funktioniert bei mir. Ich glaube nicht, dass Sie die #define benötigen, wie Denis vorgeschlagen, es ist bereits definiert AFAIK

16voto

Cœur Punkte 34332

Anstelle von __attribute__((deprecated)) können Sie die Makros verwenden, die in <cdefs.h> :

- (void)fooBar __deprecated;
// Or better:
- (void)fooBar __deprecated_msg("Use barFoo instead.");

Oder Sie können die Makros verwenden, die in <AvailabilityMacros.h> :

- (void)fooBar DEPRECATED_ATTRIBUTE;
// Or better:
- (void)fooBar DEPRECATED_MSG_ATTRIBUTE("Use barFoo instead.");

Wenn Sie Objective-C verwenden, macht das keinen Unterschied, da Sie einen modernen Compiler verwenden werden, so dass Sie die kurze Apple-Syntax verwenden können. __deprecated_msg() . Wenn Sie jedoch C für plattformübergreifende Anwendungen verwenden, dann DEPRECATED_MSG_ATTRIBUTE() verwendet die optimalen Verfügbarkeitsdefinitionen (zum Beispiel unterstützt es GCC3.1).

7voto

Chris Parker Punkte 1232

Die Antwort von Tim führt tatsächlich zu einer Compiler-Warnung; die anderen Versionen sind lediglich Kommentare, die keine Auswirkungen auf den Compiler haben.

Wenn Sie sich /usr/include/AvailabilityMacros.h ansehen, werden Sie sehen, wie Apple dies tut. Dieser Header verwendet __attribute__((deprecated)) y __attribute__((unavailable)) je nachdem, ob die API zwar vorhanden, aber veraltet ist oder ob sie tatsächlich aus dem Betriebssystem entfernt wurde.

2voto

Georg Schölly Punkte 120083

Aus Apples SFAuthorization.h:

/*!
DEPRECATED: Use obtainWithRight:flags:error:
@method permitWithRight:flags:
@abstract Call permitWithRight to gain a right to have
          access to a privilege operation.
@param rightName The name of an authorization right.
@param flags Authorization flags.
*/
- (OSStatus)permitWithRight:(AuthorizationString)rightName
                      flags:(AuthorizationFlags)flags;

Wenn Sie keine automatische Dokumentationserstellung verwenden, würde ich sagen, dass so etwas ausreichend ist:

- (void)doSomething;           /* DEPRECATED */

0 Stimmen

Danke für den Kommentar. Wenn ich die Funktion 'permitWithRight' in SFAuthorization verwende, erhalte ich eine Compilerwarnung... Gibt es eine Möglichkeit, ein Deprecation-Flag hinzuzufügen, um Compiler-Warnungen auszugeben?

0 Stimmen

Sie könnten den Präprozessor-Befehl #warning verwenden, aber das ist kein Standard und funktioniert wahrscheinlich nicht in allen Compilern. Siehe stackoverflow.com/questions/171435/

2voto

PeyloW Punkte 36534

Sie können auch die HeaderDoc Handbuch . Wo diese Syntax verwendet wird:

/*!
 * @abstract Foo is good for bar.
 *
 * @deprecated in version 2.0
 */

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X