Как пометить функцию как устаревшую в заголовочном файле iPhone Objective C?

Кто-нибудь знает как это сделать?

Я предполагаю, что есть какое-то ключевое слово, которое я могу вставить после функции где-нибудь?

РЕДАКТИРОВАТЬ: Я хотел бы, чтобы предупреждение компилятора генерировалось, если кто-то попытается использовать устаревшую функцию, похожую на поведение, наблюдаемое в API Apple.

Ура! Ник.

5 ответов

Решение

Попробуйте добавить атрибут к объявлению вашего метода:

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

Взято отсюда.

Вместо __attribute__((deprecated)), вы можете использовать использовать макросы, определенные в <cdefs.h>:

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

Или вы можете использовать макросы, определенные в <AvailabilityMacros.h>:

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

Если вы используете Objective-C, это не имеет значения, так как вы собираетесь использовать современный компилятор, поэтому вы можете использовать короткий синтаксис Apple __deprecated_msg(), Но если вы используете C для кроссплатформенности, то DEPRECATED_MSG_ATTRIBUTE() использует определения оптимальной доступности (например, он поддерживает GCC3.1).

Ответ Тима фактически выдаст предупреждение компилятора; другие версии - просто комментарии, которые не влияют на компилятор.

Если вы посмотрите на /usr/include/AvailabilityMacros.h, вы увидите, как Apple это делает. Этот заголовок использует __attribute__((deprecated)) а также __attribute__((unavailable)) в зависимости от того, присутствует ли API, но устарел или фактически удален из ОС.

Из Apple 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;

Если вы не используете автоматический конструктор документации, я бы сказал, что этого достаточно:

- (void)doSomething;           /* DEPRECATED */

Вы также можете следовать руководству по HeaderDoc. Где этот синтаксис используется:

/*!
 * @abstract Foo is good for bar.
 *
 * @deprecated in version 2.0
 */
Другие вопросы по тегам