1. ホーム
  2. objective-c

[解決済み] Xcodeでメソッドを非推奨にする方法

2023-07-02 05:37:19

質問

顧客に提供するライブラリがありますが、いくつかのメソッドを変更したため、(Apple が iPhone SDK で行うように) "deprecated"としてマークしたいと思います。

私は __OSX_AVAILABLE_BUT_DEPRECATED にマップされるプリプロセッサ・マクロです。 __AVAILABILITY_INTERNAL にマップされます。 __attribute__((deprecated)) ...

まあ、私はこのようなもので少し混乱していますよ。

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

どのように解決するのですか?

__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() {
    ...
}