2012-03-17 16 views
47

私は、新しいiOSの5プロジェクトを開始し、私は別の.hファイルを持っている場合は、この余分な@interface ...必要とされている各.Mファイルの先頭.mファイルの空の@interface宣言は何のために使われますか?

#import "HomeViewController.h" 

@interface HomeViewController() 

@end 

@implementation HomeViewController 
@synthesize ... 
  • で何か新しいことを気づきましたか?
  • なぜiOS 5以前のプロジェクトでこれが表示されませんでしたか?
  • 別の.hファイルを使用する代わりに、これを使用できますか?
  • 今後のベストプラクティスは何ですか?
+0

。 – janusbalatbat

+0

の可能な複製[.hと.mファイルの@interface定義の違い](http://stackoverflow.com/questions/3967187/difference-between-interface-definition-in-h-and-m-file) –

答えて

79

これはclass extensionです。これを使用して、.hファイルに入れたくない宣言を行うことができます。

これは多くの開発者が、.mファイルに手動で拡張機能を追加した人でも以前から使用されていました。だから私はAppleがこれをテンプレートに含めると思います。なぜなら、これは広く使われており、良い習慣と考えられているからです。

実際、.hファイルは、他のファイルから使用される宣言の作成にのみ使用する必要があります。 .mファイル内でのみ使用されるいくつかのプロパティ、メソッド、または定数を宣言する必要があります。それらの宣言のためには、クラス拡張でそれらを作る方が良いです。

だからあなたの質問にお答えします

  • は、この余分な@interface ...私は別の.hファイルを持っている場合に必要ですか?

いいえ、必須ではありませんが、ベストプラクティスです。

  • これはなぜiOS 5以前のプロジェクトには表示されませんでしたか?

これが一般的に使用されていたとしても、テンプレートには含まれませんでした。

  • 別の.hファイルではなく、これを使用できますか?

番クラス拡張は、あなたのクラスの「パブリック」インターフェースを宣言する必要が.hファイルを置き換えるものではありません。

  • これは今後のベストプラクティスですか?

あなたは、クラスの拡張で.mファイルの外に見えるようにする必要はありませんすべての宣言を置く必要があります。

+0

このような徹底的な答えをありがとう!リンゴを見てうれしいのは、このテンプレートを新しいテンプレートに含めることです。これは、ほとんどの開発者が実装しているベストプラクティスだからです! –

11

実装ファイルのインターフェースセクションでは、変数、プロパティー、およびメソッドを宣言することができます。これは、他のクラスでは見られないことを意味します。

いいえ、必須ではありません。しかし、私はできるだけそれを使用し、他のクラスが見る必要があるものだけを公開する。カプセル化のための

+2

私たちはObjective-Cメソッドを使用しているので、コンパイラは変数、プロパティ、メソッドの形式をクラス外には見ないという意味でプライベートではありません。 –

+1

あなたは正しいですが、もちろん...私はまだC++で考えることがあります。 –

関連する問題