web-dev-qa-db-ja.com

メソッドにObjective-C 2.0で非推奨のフラグを立てるにはどうすればよいですか?

私はかなり大きなiPadアプリを開発しているチームの一員であり、その結果、さまざまなクラスが作成されています。問題は、一部のメソッドが現在ほとんど廃止されており、システム全体の一部がメソッドを使用していることを知っているため、単純にそれらを削除したくないということです...代わりに(古いもののいくつかは実際に新しいものを呼び出しますが、全体的なクラスインターフェイスは面倒になっています)。

特定のメソッドを減価償却済みとしてマークする方法はありますか(@deprecated in Javaおよび[Obsolete] in .NET)。

Apple Availability.hを使用し、

__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);

...これが唯一の方法です(+これを行うのはApp Storeで安全ですか?)か、Xcodeで警告にフラグを立てる代替手段はありますか?

136
Jamie Chapman

非推奨の構文

メソッドを非推奨としてマークする構文が提供されています。

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

または:

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

私見、__deprecatedを書く方が簡単です:

- (void)myDeprecatedMethod __deprecated;
- (int)methodNameDeprecated:(int)param __deprecated;

クラスでも機能します

__deprecated
@interface MyDeprecatedClass

  // ... some properties and methods ...

@end
132
Víctor B.

非推奨フラグを使用して追加のメッセージを提供する場合は、次のフラグを使用できます。

@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.")));

上記のフラグを使用すると、非推奨の理由や、今後開発者が使用すべきメソッドを知ることができます。

81
uiroshan

メソッドを非推奨としてマークするには、__ attribute __((deprecated( "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
14
onmyway133

deprecated属性を使用します。

- (int)bar: (int)x __attribute__((deprecated));
14
Stephen Canon