2011-08-01 22 views

答えて

6

クラスのカテゴリの影響

Objective-Cランタイムは、最終的にカテゴリが含まれてあなたのインスタンスのクラス階層を生成することによって、あなたのカテゴリのメソッドを称えます。カテゴリを実装しているクラスのインスタンスは、追加のサブクラスよりも高価でなく、メモリを要求しません。カテゴリメソッドは実行時に適用されますが、メソッドがクラスに追加されると、そのクラスで定義されたメソッドと変わりありません。これらのオブジェクト間のメッセージ送信のための機構はすべて同じです。

カテゴリは、コードの設計と懸念事項の分離に関するものです。既存のCocoaパターンを使用して、メモリの最適化を考えずに、クラスの設計に役立つツールとして簡単に使用できます。

ランタイム環境上のカテゴリーの全体的な影響

@NSResponderはさらに良い点を思い出させます。カテゴリは実行時にロードされるため、使用されるまでロードされません。非常に大きなクラスまたはクラスクラスタには、別のカテゴリの上位レベルのフレームワーク用のコードが含まれている場合があります。上位レベルのフレームワークを完全に回避すると、追加するカテゴリをロードする必要はありません。たとえば、クラスはFoundationレイヤーで正常に動作し、次にCocoaレイヤーから使用されたときに余分な機能をロードします。だから、これはスペースを節約するものと考えることができ、それは大きな画像のための良い答えです。

あなたが単にいくつかのクラスを書くのであれば、これはメモリを自分で最適化するための主な手段ではありません。複数のレイヤーにまたがる大量のコードを記述している場合を除き、通常は、それらを自分で使用するか、他のオブジェクトで使用できるようにするためにカテゴリを宣言します。 Objective-CとCocoaフレームワークは、この目的を十分に果たすコード束縛を遅延ロードするための良い機械を持っています。

+0

残っている細部があります。カテゴリ内のコードは、実際に使用されるまでメモリにロードされません。 – NSResponder

+0

それは本当です。私はそれを書き留めました。 – keparo

+0

コンテキストの場合は、NSDateにカテゴリを追加しました。どのようにメモリが集中しているのですか? – Moshe

4

メモリフットプリントのカテゴリの利点は、アプリケーションが使用するまでカテゴリを読み込まないことです。 NeXTSTEPのこの日の正式な例は、ビューの印刷コードをカテゴリに入れることでした。

関連する問題