2011-06-21 14 views
3

私はXcodeののナビゲーションベースのアプリケーションを使用して新しいファイルを作成していると私は、.mファイルは、これらの行を持っていることを参照してください。iPhone - なぜ.mで宣言され、.hではなく、いくつかのメソッドが宣言されていますか?

@interface RootViewController() 
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath; 
@end 

なぜという.Mに宣言されていない上、それ自体の.h?

ヘッダーファイルに1行(この1行)を入れるのは簡単でしょうか?

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath; 

私はこの種のアプローチを他のコードで見てきました。私はまだObjective-Cを学んでいて、なぜそれが不思議ですか?

ありがとうございました。

答えて

4

クラスのパブリックインターフェイスに入れないことは、本質的にメソッドをプライベートにしていることです。クラスの外の人が本当に望むならそれを呼び出すことはできませんが、少なくともそれはコンパイラの警告)。

@interface RootViewController() 
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath; 
@end 

クラスの拡張である(=匿名カテゴリ;「通常」カテゴリは()間でカテゴリ名を持っているでしょう)。それはプライベートメソッドを宣言することです(そうでなければ、実装前に.mファイルにconfigureCell:atIndexPath:を呼び出そうとするとコンパイラの警告が出ます)。

追加するカテゴリとin the developer documentation

+0

しかし、なぜAppleはそれをテンプレートでやっているのだろうか? – Mike

+4

これは良いコーディングスタイルについて何が良いか、質問したり、何かを学ぶのに不思議に思うでしょう。 – puzzle

3

パブリックメソッドは.hファイルに格納され、非公開メソッドは.mファイルに格納され、他のクラスから隠されます。

+0

クラスの拡張機能の詳細を読むことができ、Objective-Cのにはプライベートメソッドはありません。 '.m'ファイル中の空のカテゴリは' private'メソッドを宣言するために使われます。 –

+0

しかし、Appleがテンプレートでそれをするのはどうしてですか? – Mike

+1

本当に本当に便利ですから。それはあなたが簡単にパブリックAPI対あなたのクラスだけが使用すべきものを分離/整理することができます。 – bbum

関連する問題