41

iOS Objective-Cヘッダーファイルで非推奨として関数にフラグを立てるにはどうすればよいですか?

関数のどこかに貼り付けることができるキーワードがあると思いますか?

AppleのAPIで見られる動作と同様に、廃止された関数を誰かが使用しようとした場合に、コンパイラの警告が生成されるようにしたいと思います。

4

5 に答える 5

63

メソッド宣言に属性を追加してみてください。

- (void)fooBar __attribute__ ((deprecated));

ここから撮影。

于 2009-09-18T12:36:48.273 に答える
10

の代わりに、 :__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をサポートします)。

于 2016-05-05T02:08:52.680 に答える
7

ティムの答えは実際にはコンパイラの警告を生成します。他のバージョンは単なるコメントであり、コンパイラには影響しません。

/usr/include/AvailabilityMacros.hを見ると、Appleがこれをどのように行っているかがわかります。そのヘッダーは__attribute__((deprecated))__attribute__((unavailable))APIが存在するが非推奨であるか、または実際にOSから削除されているかどうかに応じて使用します。

于 2009-09-18T20:30:22.177 に答える
2

また、 HeaderDocのマニュアルに従うこともできます。この構文が使用される場所:

/*!
 * @abstract Foo is good for bar.
 *
 * @deprecated in version 2.0
 */
于 2009-09-18T13:37:43.293 に答える
2

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 */
于 2009-09-18T10:15:44.890 に答える