web-dev-qa-db-ja.com

Xcodeでメソッドを非推奨にする方法

顧客に出荷するライブラリがありますが、一部のメソッドを変更したため、「非推奨」としてマークしたいと思います(iPhone SDKでAppleのように)。

___OSX_AVAILABLE_BUT_DEPRECATED_プリプロセッサマクロは、__attribute__((deprecated))...にマップされる___AVAILABILITY_INTERNAL_にマップされます。

まあ、私はこのものと少し混同しています!

誰もがそれについて何か知っていますか?

76
Julien

__attribute__((deprecated))は、関数/メソッドを非推奨としてマークする gcc方法 (または clangでサポート )です。 「非推奨」とマークされている場合、だれかが呼び出すたびに警告が生成されます。

通常の関数の構文は次のようになります

__attribute__((deprecated))
void f(...) {
  ...
}

// gcc 4.5+ / clang
__attribute__((deprecated("g has been deprecated please use g2 instead")))
void g(...) {
  ...
}

そしてObjective-Cメソッドのそれは

@interface MyClass : NSObject { ... }
-(void)f:(id)x __attribute__((deprecated));
...
@end

クラス全体を非推奨としてマークすることもできます

__attribute__((deprecated))
@interface DeprecatedClass : NSObject { ... }
...
@end

Appleは<AvailabilityMacros.h>ヘッダーは、上記の属性に展開するDEPRECATED_ATTRIBUTEおよびDEPRECATED_MSG_ATTRIBUTE(msg)マクロを提供します。コンパイラーが属性をサポートしない場合は何も提供しません。このヘッダーは、OS X/iOSの外部には存在しないことに注意してください。


サイドノート、Swiftを使用している場合、 @available属性 アイテムを非推奨にする。例:.

@available(*, deprecated=2.0, message="no longer needed")
func f() {
    ...
}
148
kennytm

より読みやすいdefineDEPRECATED_ATTRIBUTEを使用することもできます

usr/include/AvailabilityMacros.hで定義されています:

#define DEPRECATED_ATTRIBUTE        __attribute__((deprecated))
#define DEPRECATED_MSG_ATTRIBUTE(msg) __attribute((deprecated((msg))))

Objective-Cメソッドの例:

@interface MyClass : NSObject { ... }
-(void)foo:(id)x DEPRECATED_ATTRIBUTE;

// If you want to specify deprecated message:
-(void)bar:(id)x DEPRECATED_MSG_ATTRIBUTE("Use baz: method instead.");
...
@end

クラス全体を非推奨としてマークすることもできます。

DEPRECATED_ATTRIBUTE
@interface DeprecatedClass : NSObject { ... }
...
@end
71
skywinder

XcodeプロジェクトでC++ 14を使用している場合は、言語の一部である_[[deprecated]]_または[[deprecated("reason")]]属性も使用できます。

ドキュメントを参照してください: http://en.cppreference.com/w/cpp/language/attributes

1
Ant6n

Swift 5.0

@availableを使用して、メソッド/クラス/構造体/プロトコルを非推奨にします

@available(*, deprecated, message: "Parse your data by hand instead")
func parseData() { }

@available(*, deprecated, renamed: "loadData")
func fetchData() { }

@available(Swift, obsoleted: 4.1, renamed: "attemptConnection")
func testConnection() { }

@available(Swift, deprecated: 4.0, obsoleted: 5.0, message: "This will be removed in v5.0; please migrate to a different API.")

可能なパラメーター:

  • 導入された
  • 非推奨
  • 廃れた
  • メッセージ
  • 改名

詳細については、Apple doc: Attributes を参照してください。

0
Lal Krishna

-FOR Swift CODE:

これをメソッドのすぐ上に配置します。@available(*, deprecated: <#Version#>, message: <#Message#>)

例:

@available(*, deprecated: 11, message: "Use color assets instead")
public struct ColorPaletteItemResource: ColorPaletteItemResourceType {
    ...
}
0