Как пометить функцию как устаревшую в заголовочном файле iOS Objective-C? - PullRequest
40 голосов
/ 18 сентября 2009

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

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

Я хотел бы, чтобы предупреждение компилятора генерировалось, если кто-то попытается использовать устаревшую функцию, аналогично поведению, которое наблюдается в API Apple.

Ответы [ 5 ]

61 голосов
/ 18 сентября 2009

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

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

Взято из здесь .

7 голосов
/ 19 сентября 2009

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

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

5 голосов
/ 05 мая 2016

Вместо __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).

2 голосов
/ 18 сентября 2009

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

/*!
 * @abstract Foo is good for bar.
 *
 * @deprecated in version 2.0
 */
2 голосов
/ 18 сентября 2009

От 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 */
...