2011-07-11 14 views
1

私はappDelegateに "カテゴリ"を書くという点を本当に理解していません。たとえば、メソッドを追加するだけです。それは "プライベート"と思われます。なぜ我々はそれを行うだろうか?それは「非表示」または「ストア」実装ファイルで、この民間の方法に重要である理由私は本当にこの例のように、表示されていない。実装ファイルのプライベートメソッドのカテゴリを使用しますか?

#import "LetsMakeAThreadAppDelegate.h" 

@interface LetsMakeAThreadAppDelegate (Static) 
    - (void)backgroundThinking; 
@end 

@implementation LetsMakeAThreadAppDelegate 
... 

何かアドバイスはありますか? おかげ
ポール

答えて

3

メソッドを隠す理由はたくさんありますが、すべて(imho)は「プログラミングスタイル」という2つの言葉になります。

  • 隠しメソッドを呼び出すメッセージをオブジェクトに送信することはできますが、オブジェクトがそれを理解していない可能性があるという警告が表示されます。これは、別のオブジェクトから呼び出されることは決して意図されていないメソッドを呼び出すことを思い出させるために使用されます。

  • "workhorse"メソッドを隠すことで、コード補完の候補リストが整理され、正しいものを簡単に見つけることが容易になります。

  • あなたが作成しているコードを共有しようとしている場合、すべてのメソッドを非表示にしてクラスとのインターフェイスが必要な場合は、作業条件を大幅に改善できます。実際のコードを隠すことは望ましくないかもしれませんが、チームメイトがメソッドを使用するのを防ぐのに役立ちます。このように、チームメイトはクラスのインタフェースを理解するだけで、内部では使用できません。

  • 私が書いたスパゲッティコードの量を減らすのにも、適切なときにメソッドを隠す時間をとることが、私には再考する必要があることがわかりました。他の場所でも同じ機能が役に立つでしょうか?そのコードの一部を別のユーティリティクラスにラップすれば、それを再利用する方が簡単でしょうか?もちろん

、あなたは非常に規律していると、深刻な計画段階なし/コーディングを実験する傾向がない場合には、これのどれもあなたに関連がないかもしれません。

+0

okありがとうToastor、私はこれを長年使っていないかもしれません、以前は学ぶべきことがたくさんあります;)ありがとう – Paul

3

カテゴリー(プライベートメソッドのコンテキストで):

のObjective Cは、プライベートメソッドを宣言するための任意の定義済みの方法を提供していません。したがって、それらを宣言するためにカテゴリが使用されます。

あなたはクラスの実装(.M)ファイル(必ずしも同じクラス)内部クラスにカテゴリを追加する場合は、カテゴリ内で宣言する方法は文句を言わない彼らので、他のクラスには表示されヘッダー(.h)ファイルではなく、実装ファイル内で宣言されます。したがって、それらのメソッドは宣言されているクラスのプライベートになります。

しかし、カテゴリが.hのファイルの内側に追加された場合は、カテゴリ内で宣言されたメソッドは、単にヘッダ.Hファイルをインポートすることにより、他のクラスによってアクセスできるようになります。とにかくファイルをインポートしても、この場合は魔法はありません。私はちょうど"セレクタに応答しないかもしれません"警告を抑制します。

+0

ありがとうございましたemptyStack – Paul

+0

うん。ようこそポール! – EmptyStack

関連する問題