web-dev-qa-db-ja.com

カテゴリを使用する場合とサブクラス化を使用する場合

Objective-Cでカテゴリを使用するタイミングとサブクラス化を使用するタイミングを教えてもらえますか?また、それらの長所と短所を教えてください。

29
philip abraham

最小限のコードでクラスのすべてのインスタンスの動作を変更したい場合は、objective-cカテゴリが役立ちます。サブクラス化は、特定のインスタンスのみの動作を変更し、他のインスタンスの元のメソッドを保持する場合に役立ちます。

カテゴリは危険な場合があります。特に、元のメソッドのソースを表示できない場合は、カテゴリではなく、サードパーティおよびプライベートフレームワークでサブクラスを使用する必要があります。

41
coneybeare

カテゴリ:ソースが不明な特定のクラスにメソッドを追加する場合に使用されます。これは基本的に、クラスの動作を変更する場合に使用されます。

例:NSStringにメソッドを追加して文字列を逆にする場合は、カテゴリに移動できます。

サブクラス化:クラスの状態と動作を変更したり、メソッドをオーバーライドして親クラスの動作を変更したりする場合は、サブクラス化を行います。

例:UIViewをサブクラス化して、iOSコードの状態と動作を変更します。

15
creative_rd

コニーベアが言ったことに加えて。サブクラス化はカスタマイズに適したオプションであり、既存のクラスに機能を追加するだけの場合は、カテゴリを使用することをお勧めします。

8
mariostallone
  • UIオブジェクトのライフサイクル中にフレームワーク呼び出しの一部として発生する何かを変更しますか?サブクラスを使用します。 init、drawrect、layoutsubviewsなどのそれぞれのメソッドをオーバーライドします。

  • アプリケーション全体に何かが必要ですか?
    既存の機能への追加、そしてこれが気にしない
    フレームワーククラスのこの既存のインスタンスのすべてのインスタンスで使用できるようになりますか?カテゴリを使用します。例:特定のユーザーアクションでUILabelをアニメーション化し、このアニメーションをアプリ全体ですべてのUILabelインスタンスに適用します。

3
Nirav Bhatt