Ответ 1
Попробуйте добавить атрибут к объявлению вашего метода:
- (void)fooBar __attribute__ ((deprecated));
Взято из здесь.
Как пометить функцию как устаревшую в заголовочном файле iOS Objective-C?
Я предполагаю, что есть какое-то ключевое слово, которое я могу вставить после функции где-нибудь?
Я хотел бы, чтобы генерировалось предупреждение компилятора, если кто-нибудь попытается использовать устаревшую функцию, аналогично поведению, наблюдаемому в API Apple.
Попробуйте добавить атрибут к объявлению вашего метода:
- (void)fooBar __attribute__ ((deprecated));
Взято из здесь.
Ответ на ТМ действительно даст предупреждение о компиляторе; другие версии - это просто комментарии, которые не имеют никакого эффекта w.r.t. компилятор.
Если вы посмотрите на /usr/include/AvailabilityMacros.h, вы увидите, как это делает Apple. Этот заголовок использует __attribute__((deprecated))
и __attribute__((unavailable))
в зависимости от того, присутствует ли API, но устарел или фактически удален из ОС.
Вместо __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).
От 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
*/