我该如何在 iOS Objective-C 的头文件中将函数标记为已弃用?
我猜在函数后面会有一些关键字可以使用?
我想要生成编译器警告,防止任何人尝试使用已弃用的函数,就像在 Apple 的 API 中看到的行为一样。
我该如何在 iOS Objective-C 的头文件中将函数标记为已弃用?
我猜在函数后面会有一些关键字可以使用?
我想要生成编译器警告,防止任何人尝试使用已弃用的函数,就像在 Apple 的 API 中看到的行为一样。
- (void)fooBar __attribute__ ((deprecated));
内容摘自这里。
你可以使用 <cdefs.h>
中定义的宏,而不是使用__attribute__((deprecated))
:
- (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,那么由于您将使用现代编译器,因此可以选择苹果短语法__deprecated_msg()
,这没有任何区别。但是如果您使用C进行跨平台开发,则DEPRECATED_MSG_ATTRIBUTE()
使用最佳可用性定义(例如,它支持GCC3.1)。Tim的回答实际上会产生编译警告;其他版本只是注释,对于编译器没有影响。
如果你查看 /usr/include/AvailabilityMacros.h,你会看到苹果是如何做到这一点的。该头文件使用 __attribute__((deprecated))
和 __attribute__((unavailable))
,具体取决于API是否存在但已弃用,或者已从操作系统中删除。
以下内容来自苹果公司的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 */