9

Objective-cのプライベートメソッドへのベストプラクティスアプローチは何ですか。これは、クラスをヘルパーメソッドとしてのみ使用するメソッドです。

特に私にははっきりしないのは:

  1. ヘッダーファイルでプライベートとして指定されたメソッドを持つ必要はありますか?つまり、ヘッダーファイルから除外しないのはなぜですか。
  2. ヘッダーファイルから除外できる場合、プライベートメソッドを持つことのポイントは何ですか?
  3. それとも、objective-cの場合、実際のプライベートメソッドのようなものはありません。その場合、ヘッダーファイルですべてを指定し、わざわざプライベートをマークしない方がよいでしょうか。

ありがとう

4

3 に答える 3

7

パブリックヘッダーファイルでメソッドを指定する必要はありません。モジュール内のクラスが「フレンド」であると想定されている場合は、モジュール内の他のクラスで使用するための「プライベート」ヘッダーファイルが必要になる場合があります。UIGestureRecognizerSubclass.hたとえばAppleが行っているように、「保護された」ヘッダーファイルを作成することもできます。それはすべて単なる慣習ですが、言語自体でサポートされているものはありません。

Objective-Cのプライベートメソッドは、公に文書化されていないメソッドにすぎません。適切なセレクターを作成するために呼び出し元がメソッドの名前を知っている限り、どのメソッドもどこからでも呼び出すことができます。メソッドを公開しないことの利点は、下位互換性を気にせずにメソッドを自由に変更または削除できることです。それらをヘッダーファイルから除外することは、それらを公に文書化しない1つの方法です。

于 2011-03-14T00:20:28.160 に答える
6

おそらく使用したいものは「クラス拡張」と呼ばれます。それらは似ていますが、カテゴリと混同しないでください。これにより、.mファイルでプライベートメソッドを宣言できるようになり、IDEの優れた修正と提案がすべて得られます。

これはそれに関するまともな記事と
関連するSOの質問です

于 2011-03-13T23:56:50.590 に答える
2

ベストプラクティス(およびチェックするコンパイラオプションですら)は、すべてのメソッドをいずれかの方法で宣言することです。ヘルパーメソッドを詮索好きな目から「隠す」には、次のように、実装.mファイルでそのように宣言します。

#import Client;

@interface myClass (Private)
- (void) privateMethod;
- (float) bankAccountBalanceForClient:(Client *)client;
@end

@implementation myClass
- (void) privateMethod;
{
    //foo here
}

等々。プライベートメソッドは、myClassメソッドのプライベートと呼ばれるカテゴリです。このカテゴリは、プライベートメソッドと呼ばれるマスター.hファイルであっても、どこでも宣言できますが、これはメンテナンスの悪夢です。

したがって、パブリックメソッドにパブリック.hファイルを使用し、プライベートメソッドを宣言するために.mファイルを使用すると、すべてのメソッドがどこかで宣言されます。私はこのコンパイラオプションを使用してそれを確実にし、強制します。これにより、使用されるメソッドが実際にどこかで宣言され(または構文エラーが発生し)、メソッドが見つからないためにランタイムがクラッシュすることはありません。

于 2011-05-16T17:23:31.730 に答える