如何在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