如何在Objective-C 2.0中将某个方法标记为弃用?
我是开发一个相当大的iPad应用程序的一个团队的一部分,我们已经创build了许多不同的类。 麻烦的是一些方法现在已经非常陈旧了,我不想简单地删除它们,因为我知道整个系统的一些部分使用方法…但是还有更好的(更新的)变体可用相反(一些旧的实际上称为新的,但整体类接口变得混乱)。
有没有一种方法可以将某些方法标记为折旧(如在Java中使用@deprecated
,在.NET中使用[Obsolete]
)。
我看到苹果使用Availability.h并具有标签如
__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);
…这是唯一的方法(+它是这样做的应用程序商店安全吗?)或者有替代品,将在Xcode的标志警告?
弃用语法
提供语法以将方法标记为已弃用:
@interface SomeClass -method __attribute__((deprecated)); @end
要么:
#include <AvailabilityMacros.h> @interface SomeClass -method DEPRECATED_ATTRIBUTE; // or some other deployment-target-specific macro @end
恕我直言,这是更容易编写__deprecated:
- (void)myDeprecatedMethod __deprecated; - (int)methodNameDeprecated:(int)param __deprecated;
在课堂上也是如此
__deprecated @interface MyDeprecatedClass // ... some properties and methods ... @end
如果您想使用弃用标志提供额外的消息,则可以使用以下标志。
@property (strong, nonatomic) NSString *catName __deprecated_msg("use name instead."); // -- Or -- @property (strong, nonatomic) NSString *catName DEPRECATED_MSG_ATTRIBUTE("use name instead."); // -- Or -- @property (strong, nonatomic) NSString *catName __attribute__((deprecated("use name instead.")));
使用上面提到的标志,你可以告诉你为什么不推荐使用,或者将来开发人员应该使用什么方法。
使用deprecated
属性:
- (int)bar: (int)x __attribute__((deprecated));
若要将方法标记为已弃用,请使用__attribute __((不build议(“您的消息放在此处”)))
曼特尔的一个实际例子
@interface NSValueTransformer (UnavailableMTLPredefinedTransformerAdditions) + (NSValueTransformer *)mtl_externalRepresentationTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +mtl_JSONDictionaryTransformerWithModelClass:"))); + (NSValueTransformer *)mtl_externalRepresentationArrayTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +mtl_JSONArrayTransformerWithModelClass:"))); @end