2012-03-05 14 views
1

私はObjective-Cのではかなり新しいだと私は質問をしました:特定の状況におけるObj-cカテゴリの目的。

私はいくつかのAppleのサンプルコードをしてきて、次を見つけた:

の上で

https://developer.apple.com/library/ios/#samplecode/GLSprite/Listings/Classes_EAGLView_m.html#//apple_ref/doc/uid/DTS40007325-Classes_EAGLView_m-DontLinkElementID_4

ファイル、Objective-Cカテゴリの用途を発見しました。

@interface EAGLView (EAGLViewPrivate) 

- (BOOL)createFramebuffer; 
- (void)destroyFramebuffer; 

@end 


@interface EAGLView (EAGLViewSprite) 

- (void)setupView; 

@end 

直後に、EAGLViewクラスの実装を開始します。

上記の3つの機能は、ヘッダーファイルで直接定義することができるため、カテゴリの実際の目的は何ですか?

Thxをは.mファイルでこれらのメソッドを宣言する最初のカテゴリの名前(「EAGLViewPrivate」)によって示されるように

答えて

6

プライベートメソッドをシミュレートする方法です。 Objective-Cはプライベートメソッドをサポートしていませんが、.hファイルで宣言されていないため、宣言されている.mファイルの外側にあるコードが呼び出されると警告します。

これは、最近では、クラス拡張の使用により、クラスの@implementationブロックに "private"メソッドが実装されていない場合、コンパイラの警告が発生するため、最近はクラス拡張(カテゴリの特殊なケース) 。クラス拡張はObjective-C 2.0の新機能でした。古いコードでは、あなたが投稿したコードのように、名前にプライベートなカテゴリがよく見られます。その意図は同じです。

+0

明確な答えのためのThx。しかし、なぜあなたは1つではなく2つの異なるカテゴリを考えているのですか? –

+0

私はそのコード意図の著者が何だったのか分かりません。おそらく、コードを少しだけ読みやすくするために、関数でメソッドを整理する方法です。プライベートメソッドがたくさんある場合は、関連するメソッドのグループを分離しておくと、コードを読みやすくしたり、リファクタリングを簡単にすることができます。つまり、私はちょうどそれを行うにはコメントと '#pragma mark 'を使用します。 –

+0

あなたの時間のためのよいthx。 –

関連する問題