2012-03-06 9 views
4

私の英語のために申し訳ありません、私の心から話してください:) 私が働く1つのプロジェクトでは、面白い瞬間に気付きました。* .hと* .mファイルの2つのインターフェイス

@interface FrontViewController : UIViewController 
... 
@end 

そして、私は別のインターフェイスを見つけた*の.mファイルに:* .hファイルで

インターフェイスを宣言しました。

@interface FrontViewController() 

// Private Properties: 
@property (retain, nonatomic) UIPanGestureRecognizer *navigationBarPanGestureRecognizer; 

// Private Methods: 
- (IBAction)pushExample:(id)sender; 

@end 

@implementation FrontViewController 
... 
@end 

なぜ必要なのですか?そして何がポイントですか?これは便宜のためだと思います。はい?

+0

なぜこれはC++とマークされていますか? – Lou

+0

私はObjectiveC++とC++でプログラミングしているので、ヘッドファイルと実装ファイルもあります。 –

+1

これは何度も答えられています。ここに1つです:[.hと.mファイルの@interface定義の違い](http://stackoverflow.com/questions/3967187/difference-between-interface-definition-in-h-and-m-file) –

答えて

6

これはクラスの拡張です。これは通常、クラスのプライベートメソッドとプロパティを宣言するために使用されます。

詳しくはhereをご覧ください。

+0

私は.hファイルにプライベートメソッドを指定できません。 .mファイルのプライベートメソッドを指定した場合、.mファイルで指定されたプライベートメソッドを実装するために、コンパイル時にチェックが追加されます。 –

+0

ヘッダーは、公開されているクラス定義です。 – mydogisbox

3

これはクラス拡張です。ソースにアクセスできない場合でも、クラスの「プライベート」メソッドとプロパティを宣言することができます。主な用途は、これらのメソッドをインタフェースの一部として公開しないことです。ほとんどの言語とは異なり、これらのメソッドは実行時に検出可能ですので、これらの値はIDEオートコンプリートであり、クラスのコンシューマが隠しメソッドを呼び出すのを妨げるものではありません。宣言なしで実装にメソッドを簡単に定義することは可能ですが、使用される場所の上にメソッドを実装する必要があります。これらを拡張子として宣言することで、この問題を防ぐことができます。

拡張子に名前が付いている場合は、クラス実装をいくつかのファイルに配布するためのカテゴリになります。

関連する問題