私はかなり大きな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で警告にフラグを立てる代替手段はありますか?
メソッドを非推奨としてマークする構文が提供されています。
@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.")));
上記のフラグを使用すると、非推奨の理由や、今後開発者が使用すべきメソッドを知ることができます。
メソッドを非推奨としてマークするには、__ 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
deprecated
属性を使用します。
- (int)bar: (int)x __attribute__((deprecated));