2

Objective-C環境で使用するために、Javaの属性に似たものを探しています。

一連のメソッドが定義された実装ファイルがあるとします。実行時にイントロスペクションでそれらを見つけることができるようにマークアップする方法はありますか? 何かのようなもの;

##special_method
- (void)foo
{

}

##special_method
- (void)bar
{

}

// Not special
- (void)baz
{

}

私が知る限り、何も存在しないので、メソッド名の前に一般的なものを付けることをお勧めします。

- (void)_special_foo
{

}

- (void)_special_bar
{

}

// Not special
- (void)baz
{

}

他に面白いアイデアはありますか?

4

4 に答える 4

1

あなたの質問を正しく理解しているかどうかはわかりませんが、「興味深い」可能な解決策として、エントリ時に特定の関数を識別する(およびオプションで終了時にリセットする)一意の値に設定されたグローバル変数を使用できます。スタックを使用して、いつでも検査できるこれらの値をトレースできます。

于 2012-10-27T11:05:53.847 に答える
1

プライベート メソッドを識別するための Apple の提案は、一意のプレフィックスを付けることです。

Cocoa フレームワークのほとんどのプライベート メソッドの名前には、プライベートであることを示すアンダースコア プレフィックス (たとえば、_fooData) が付いています。この事実から、2 つの推奨事項に従ってください。

  • アンダースコア文字をプライベート メソッドのプレフィックスとして使用しないでください。Apple はこの規則を留保します。

  • NSView大規模な Cocoa フレームワーク クラス (または など)をサブクラス化UIViewし、プライベート メソッドの名前がスーパークラスのものとは異なることを確実にしたい場合は、プライベート メソッドに独自のプレフィックスを追加できます。プレフィックスは、おそらく会社またはプロジェクトに基づいたもので、「XX_」の形式で、できるだけ一意である必要があります。したがって、プロジェクトが Byte Flogger と呼ばれる場合、プレフィックスは次のようになります。BF_addObject:

同様のスキームを使用して、特定のメソッドをある種のランタイム操作に対して特別なものとしてマークできると思います。

于 2012-10-27T10:49:50.643 に答える
0

メソッド名の先頭に単一のアンダースコアを付けないでください。これは、メソッド名があなたのメソッド名と衝突しないようにするための Apple の内部コーディング規則です。メソッド名を区別したい場合は、共通のプレフィックスを使用してください。

于 2012-10-27T10:34:03.357 に答える
0

クラスを実装しているので、そのクラスの特別なメソッドのリストを返すメソッドを定義してみませんか? サブクラスを作成する必要がある場合は、サブクラスに親のリストを取得して追加してもらいます。

于 2012-10-31T00:26:46.077 に答える