1
  1. 私が知っているように、[self setDate:...]平均selfは受信者であり、setDate:メッセージです。送信者はどちらですか?

  2. action でボタンを設定しました(IBAction)buttonPressed:(id)sender。このボタンがターゲットでbuttonPressedあり、アクションであることを理解しました。それで、どれができるのsenderですか?

4

4 に答える 4

4

1)私が知っているように、[self setDate:...]平均selfは受信者であり、setDate:メッセージです。送信者はどちらですか?

送信者は、メッセージを送信したオブジェクト (存在する場合) です。

それで、それはどれですか?

  1. あなたは声明でメッセージを書きました。
  2. 関数、クラス メソッド、またはインスタンス メソッド内にそのステートメントを記述しました。

    • 関数だった場合、送信者だったオブジェクトはありません。
    • それがクラスメソッドであった場合、間違いなくクラスが送信者です (クラスをオブジェクトと見なす度合いによって異なります)。
    • インスタンス メソッドの場合、そのメソッドが呼び出された (つまり、メッセージを受信た) オブジェクトがメッセージの送信者になりsetDate:ます。

      たとえば、NSWindowController サブクラスで指定されたインスタンス メソッドsetDate:からメッセージを送信した場合、ウィンドウ コントローラー (メッセージを受信したインスタンス (オブジェクト)) がメッセージを送信したオブジェクトになります。buttonPressed:buttonPressed:setDate:

もちろん、メッセージの受信者が である場合、メッセージは自分自身に送信されているので、受信者self送信者の両方になります。

2) アクション (IBAction)buttonPressed:(id)sender でボタンを設定しました。このボタンがターゲットで、buttonPressed がアクションであることがわかりました。

いいえ!ボタンはターゲットではありません。ボタンには、別のオブジェクトであるターゲットがあります。ターゲットは、アクション メッセージを受け取るオブジェクトです。

アーチェリーの的を考えてみてください。的は矢を放たない!矢を受けます。

それで、どれが送信者になることができますか?

sender通常、変数によって参照されるオブジェクトは、メッセージを送信したオブジェクトです。

通常、これはコントロール (ボタンなど) またはメニュー項目です: 押されると、コントロールまたはメニュー項目はそのアクション メッセージをターゲットに送信し、それ自体 (コントロールまたはメニュー項目) を「送信者」として渡します。

したがって、ボタンはそのターゲットにメッセージを送信します。メッセージは、ボタンのアクションとして設定されているものであり、メッセージを送信しているため、sender.

senderをまったく見る唯一の理由は、送信者のtagまたはを調べることrepresentedObjectです。アクション メソッドは、送信者を気にする必要がある唯一の種類のメソッドであり (このため、この引数が含まれています)、通常はそうではありません。

于 2013-05-17T05:22:35.423 に答える
0

1) はい、selfメッセージの受信者でありsetDate:、メッセージ (メソッド呼び出し) です。「差出人」はありません。そもそも「差出人」って何?

buttonPressed:2) コードでは、メソッドを呼び出すボタンを次のように設定します。

[someButton addTarget:someTarget action:@selector(buttonPressed:) forControlEvents: UIControlEventTouchUpInside];

someTargetは通常selfです。「ターゲット」は、「アクション」メソッドを持つオブジェクトです。メソッドは次のようになります。

- (void)buttonPressed:(UIButton *)button {
}

「someButton」はイベントが発生したボタンであるため、「送信者」です。

于 2013-05-16T03:27:41.657 に答える
0

実際、objective-c メッセージング システムには、「送信者」という正式な概念はありません。

  • (IBAction)buttonPressed:(id)送信者。

    ここで、sender は通常のメソッド引数であり、目的の c メッセージング システムの一部ではありません。Appkit または UIKIt で名前が付けられる方法の引数です。

  • [self setDate:...] ここで「self」は受信者で、setDate: はメッセージです。

注: 通常の会話では、「メッセージを送信する」とは、送信者、受信者、およびメッセージの 3 つを意味します。送信者は、メッセージを含む関数またはコードのブロックです。しかし、その類推は目的 c には当てはまりません。

于 2014-05-06T11:27:24.520 に答える