如何标记在 Objective-C2.0中已弃用的方法?

我所在的团队正在开发一个相当大的 iPad 应用程序,因此我们创建了许多不同的类。问题是有些方法现在已经过时了,我不想简单地删除它们,因为我知道整个系统的一些部分使用这些方法... ... 但是还有更好的(更新的)变体可以使用(一些旧的方法实际上调用了新的方法,但是整个类接口变得混乱)。

是否有一种方法可以将某些方法标记为折旧(如 Java 中的 @deprecated和。NET).

我看到苹果使用的可用性 h 和标签,如

__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);

... 这是唯一的方法吗(+ App Store 这样做安全吗?)还是有其他办法可以在 Xcode 发出警告?

49738 次浏览

弃用语法

语法用于将方法标记为已弃用:

@interface SomeClass
-method __attribute__((deprecated));
@end

或:

#include <AvailabilityMacros.h>
@interface SomeClass
-method DEPRECATED_ATTRIBUTE;  // or some other deployment-target-specific macro
@end

使用 deprecated属性:

- (int)bar: (int)x __attribute__((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.")));

使用上面提到的标志,您可以说明为什么不推荐使用,或者方法开发人员将来应该使用什么。

若要将方法标记为已弃用,请使用 _ _ tribute _ _ ((不推荐(“ Your message goes here”)))

一个实际的例子,来自曼特尔

@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