2

カテゴリの質問:

NSURLにカテゴリを配置します。このカテゴリは、特にクエリメソッドをオーバーライドして、RFC1808に準拠していないURLからクエリ文字列を提供できるようにします。私のカテゴリーでこのようなことをすることは合法ですか?

- (NSString *)query //real NSURL method
{
     if (stringIsRFC1808) //want to get the default implementation
          return [super query];
     else 
          return somethingElse; //want to get my custom implementation
}

ありがとう

4

3 に答える 3

6

を使用しているため、そのままのコードは有効ではあり[super query]ません。カテゴリはスーパークラスではありません。ここで[super query]呼び出そうとし- [NSObject query]ます - BOOM 認識されないセレクターエラー。カテゴリを使用してクラスを拡張している場合、元のメソッドを呼び出すことはできません。この機能が必要ない場合は、カテゴリを使用しても問題ありませんが、必要な場合はサブクラス化を検討する必要があります。 、(Foundation オブジェクトのさらに優れた構成!) または Objective-C ランタイムを使用してメソッドの入れ替えを実行する- この方法で、メソッドの元の実装にアクセスできます。

于 2012-09-09T09:06:12.747 に答える
2

カテゴリを使用して既存のメソッドをオーバーライドしないでください。カテゴリは、サブクラス化せずにクラスの動作を強化するために使用されます。(オーバーライドできると思いますが、Apple は強くお勧めしません)

于 2012-09-09T09:01:47.993 に答える
2

Apple SDK と競合しないように、独自のメソッドを追加します。このカテゴリを使用している会社の誰かを考えてみましょう: 彼が最初にすることは、開発者ライブラリを調べて、このメソッドが何をするかを知ることです。

カテゴリをインポートした後、本来の機能が実行されなくなります。Appleはこれをお勧めしません!

于 2012-09-09T09:06:54.040 に答える