私が知っているように、
[self setDate:...]
平均self
は受信者であり、setDate:
メッセージです。送信者はどちらですか?action でボタンを設定しました
(IBAction)buttonPressed:(id)sender
。このボタンがターゲットでbuttonPressed
あり、アクションであることを理解しました。それで、どれができるのsender
ですか?
4 に答える
1)私が知っているように、
[self setDate:...]
平均self
は受信者であり、setDate:
メッセージです。送信者はどちらですか?
送信者は、メッセージを送信したオブジェクト (存在する場合) です。
それで、それはどれですか?
- あなたは声明でメッセージを書きました。
関数、クラス メソッド、またはインスタンス メソッド内にそのステートメントを記述しました。
- 関数だった場合、送信者だったオブジェクトはありません。
- それがクラスメソッドであった場合、間違いなくクラスが送信者です (クラスをオブジェクトと見なす度合いによって異なります)。
インスタンス メソッドの場合、そのメソッドが呼び出された (つまり、メッセージを受信した) オブジェクトがメッセージの送信者になり
setDate:
ます。たとえば、NSWindowController サブクラスで指定されたインスタンス メソッド
setDate:
からメッセージを送信した場合、ウィンドウ コントローラー (メッセージを受信したインスタンス (オブジェクト)) がメッセージを送信したオブジェクトになります。buttonPressed:
buttonPressed:
setDate:
もちろん、メッセージの受信者が である場合、メッセージは自分自身に送信されているので、受信者とself
送信者の両方になります。
2) アクション (IBAction)buttonPressed:(id)sender でボタンを設定しました。このボタンがターゲットで、buttonPressed がアクションであることがわかりました。
いいえ!ボタンはターゲットではありません。ボタンには、別のオブジェクトであるターゲットがあります。ターゲットは、アクション メッセージを受け取るオブジェクトです。
アーチェリーの的を考えてみてください。的は矢を放たない!矢を受けます。
それで、どれが送信者になることができますか?
sender
通常、変数によって参照されるオブジェクトは、メッセージを送信したオブジェクトです。
通常、これはコントロール (ボタンなど) またはメニュー項目です: 押されると、コントロールまたはメニュー項目はそのアクション メッセージをターゲットに送信し、それ自体 (コントロールまたはメニュー項目) を「送信者」として渡します。
したがって、ボタンはそのターゲットにメッセージを送信します。メッセージは、ボタンのアクションとして設定されているものであり、メッセージを送信しているため、sender
.
sender
をまったく見る唯一の理由は、送信者のtag
またはを調べることrepresentedObject
です。アクション メソッドは、送信者を気にする必要がある唯一の種類のメソッドであり (このため、この引数が含まれています)、通常はそうではありません。
1) はい、self
メッセージの受信者でありsetDate:
、メッセージ (メソッド呼び出し) です。「差出人」はありません。そもそも「差出人」って何?
buttonPressed:
2) コードでは、メソッドを呼び出すボタンを次のように設定します。
[someButton addTarget:someTarget action:@selector(buttonPressed:) forControlEvents: UIControlEventTouchUpInside];
someTarget
は通常self
です。「ターゲット」は、「アクション」メソッドを持つオブジェクトです。メソッドは次のようになります。
- (void)buttonPressed:(UIButton *)button {
}
「someButton」はイベントが発生したボタンであるため、「送信者」です。
実際、objective-c メッセージング システムには、「送信者」という正式な概念はありません。
(IBAction)buttonPressed:(id)送信者。
ここで、sender は通常のメソッド引数であり、目的の c メッセージング システムの一部ではありません。Appkit または UIKIt で名前が付けられる方法の引数です。
[self setDate:...] ここで「self」は受信者で、setDate: はメッセージです。
注: 通常の会話では、「メッセージを送信する」とは、送信者、受信者、およびメッセージの 3 つを意味します。送信者は、メッセージを含む関数またはコードのブロックです。しかし、その類推は目的 c には当てはまりません。