如何在iOS Objective-C头文件中将函数标记为已弃用?

问题描述 投票:40回答:5

如何在iOS Objective-C头文件中将函数标记为已弃用?

我猜这里有一些关键字,我可以在某个地方找到这个功能后坚持下去?

我希望在任何人尝试使用已弃用的函数时生成编译器警告,类似于Apple API中的行为。

objective-c function deprecated
5个回答
61
投票

尝试在方法声明中附加属性:

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

取自here


7
投票

蒂姆的回答实际上会产生编译警告;其他版本只是评论,没有影响w.r.t.编译器。

如果你看一下/usr/include/AvailabilityMacros.h,你就会看到Apple是如何做到这一点的。该标头使用__attribute__((deprecated))__attribute__((unavailable)),具体取决于API是否存在但已弃用,或者实际已从操作系统中删除。


5
投票

您可以使用__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)。


2
投票

来自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 */

2
投票

你也可以关注HeaderDoc manual。使用此语法的位置:

/*!
 * @abstract Foo is good for bar.
 *
 * @deprecated in version 2.0
 */
© www.soinside.com 2019 - 2024. All rights reserved.