iOS Objective-Cヘッダーファイルで非推奨として関数にフラグを立てるにはどうすればよいですか?
関数のどこかに貼り付けることができるキーワードがあると思いますか?
AppleのAPIで見られる動作と同様に、廃止された関数を誰かが使用しようとした場合に、コンパイラの警告が生成されるようにしたいと思います。
iOS Objective-Cヘッダーファイルで非推奨として関数にフラグを立てるにはどうすればよいですか?
関数のどこかに貼り付けることができるキーワードがあると思いますか?
AppleのAPIで見られる動作と同様に、廃止された関数を誰かが使用しようとした場合に、コンパイラの警告が生成されるようにしたいと思います。
の代わりに、 :__attribute__((deprecated))
で定義されたマクロを使用できます。<cdefs.h>
- (void)fooBar __deprecated;
// Or better:
- (void)fooBar __deprecated_msg("Use barFoo instead.");
<AvailabilityMacros.h>
または、 :で定義されたマクロを使用できます。
- (void)fooBar DEPRECATED_ATTRIBUTE;
// Or better:
- (void)fooBar DEPRECATED_MSG_ATTRIBUTE("Use barFoo instead.");
Objective-Cを使用する場合は、最新のコンパイラを使用するので違いはないので、Appleの短い構文を使用できます__deprecated_msg()
。ただし、クロスプラットフォームにCを使用する場合DEPRECATED_MSG_ATTRIBUTE()
は、最適な可用性定義を使用します(たとえば、GCC3.1をサポートします)。
ティムの答えは実際にはコンパイラの警告を生成します。他のバージョンは単なるコメントであり、コンパイラには影響しません。
/usr/include/AvailabilityMacros.hを見ると、Appleがこれをどのように行っているかがわかります。そのヘッダーは__attribute__((deprecated))
、__attribute__((unavailable))
APIが存在するが非推奨であるか、または実際にOSから削除されているかどうかに応じて使用します。
また、 HeaderDocのマニュアルに従うこともできます。この構文が使用される場所:
/*!
* @abstract Foo is good for bar.
*
* @deprecated in version 2.0
*/
AppleのSFAuthorization.hから:
/*!
DEPRECATED: Use obtainWithRight:flags:error:
@method permitWithRight:flags:
@abstract Call permitWithRight to gain a right to have
access to a privilege operation.
@param rightName The name of an authorization right.
@param flags Authorization flags.
*/
- (OSStatus)permitWithRight:(AuthorizationString)rightName
flags:(AuthorizationFlags)flags;
自動化されたドキュメントビルダーを使用していない場合は、次のようなもので十分です。
- (void)doSomething; /* DEPRECATED */