Как пометить функцию как устаревшую в заголовочном файле 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
*/