0

任意のデリゲート メソッドにコードを記述した場合。それはある種のメソッドのオーバーロードでしょうか?

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
    switch (alertView.tag)
    {
    case 1000:
        if (buttonIndex == 0)
        {
            [self revealOneLetter];
        }
        break;
    case 2000:
        if (buttonIndex == 0)
        {
            [self removeSomeLetters];
        }
        break;
    case 5000:
        [self backBtnAction:nil];
        break;
    case 3000:
        if (buttonIndex == 1)
        {
            [self buyBtnAction:nil];
        }
        break;
     }

     }

上記のコードでは、デリゲート メソッドでいくつかのメソッドを呼び出しているため、基本的にはデリゲートを上書きしています。このことの正確な名前は何ですか。

4

4 に答える 4

2

あなたは何もオーバーライドしていません(またはオーバーライドまたはオーバーロードしていますが、どちらも異なります)、デリゲートメソッドを実装しています。つまり、委任オブジェクトによって呼び出すことができるメソッドを追加しています。この効果は、サブクラスのメソッドをオーバーライドするのと似ています。どちらの場合も、オブジェクトの動作を変更していますが、関係は異なります。委譲パターンは、サブクラス化なしで特殊化を提供しますたとえば、アプリ ストアにある無数のアプリの 4 分の 3 は、ほぼすべてが同一の UIApplication オブジェクトを使用しています。アプリケーション デリゲートを使用して特殊化できるため、誰も UIApplication をサブクラス化していません。

于 2013-07-25T07:52:44.470 に答える
1

オーバーロードするのではなく、ここでプロトコルのメソッド (UIAlertViewDelegate プロトコル) を実装しています (これは上書きを意味していると思います)。

Objective-C では:

  • オーバーロード: メソッド名が同じでパラメータが異なるものは存在しません (たとえば Java の場合のように)
  • オーバーライド: サブクラスのメソッドを書き換えて、子コンテキストで親の動作を適応させるアクションです

ここで行うことは、特定のイベントが発生したとき (ボタンがクリックされたとき) にどのように動作するかを UIAlertView インスタンスに伝えることです。

于 2013-07-25T07:49:28.357 に答える
1

これは上書きでもオーバーロードでもなく、絶対にそうではありません。実際にあなたのクラス(viewControllerなど)がプロトコルに準拠または採用しています(あなたの場合UIAlertViewDelegate)。そして、目的の c のA プロトコルは、メソッド宣言のリストです。クラスがプロトコルを採用または準拠している場合は、それらのメソッドをクラスに実装する必要があります。プロトコルに準拠している場合に実装する必要があるプロトコル必須のメソッドと、その他はオプションの 2 種類のメソッドがあります。名前によって、それらのメソッドを実装するかどうかは開発者次第であることを識別できます。

したがって、あなたの場合、それぞれのクラスがプロトコルに準拠/採用しました。つまりUIAlertViewDelegate、どのボタンUIAlertViewが押されたかを通知する次のメソッドを実装しているのはそのためです。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

于 2013-07-25T08:26:07.100 に答える
1

あなたは何も上書きしていません。デリゲート プロトコルを実装しています。

上書きとは、サブクラスでスーパークラスのメソッドを再実装することを意味します。のようなこれらすべてのUIViewControllerメソッドviewDidLoadに対して、独自の viewcontroller サブクラスを作成してメソッドを記述すると、のメソッドviewDidLoad上書きされます。viewDidLoadUIViewController

于 2013-07-25T07:49:39.547 に答える