如何在iOS Objective-C头文件中将函数标记为已弃用?
我猜这里有一些关键字,我可以在某个地方找到这个功能后坚持下去?
我希望在任何人尝试使用已弃用的函数时生成编译器警告,类似于Apple API中的行为。
蒂姆的回答实际上会产生编译警告;其他版本只是评论,没有影响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 manual。使用此语法的位置:
/*!
* @abstract Foo is good for bar.
*
* @deprecated in version 2.0
*/