Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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