1

私はObjective-Cでメッセージ構文を読む方法を学び始めており、メッセージ構文の十分な理解を強化したいと思っています(私はJava / C#/ Rubyのバックグラウンドから来ています)。

私は現在、声明を見ています:

[self.view addSubview:label];

「このメッセージをaddSubViewメソッドに送信します。引数としてlabelを使用すると、mthodは自分自身のビューオブジェクトにあります。」

(「on」は、オブジェクトの「ドット表記」を説明するための優れた方法ではありません。私は、それを転記するためのより良い方法を受け入れています!)

上記のステートメントをどのように読んで解釈しますか?

4

3 に答える 3

4

これは実際にはネストされたメッセージ送信ですが、ドット構文では混乱を招きます。* ObjCのメッセージとメソッドの違いも、最初は少し混乱する可能性があります。一般に、それらは同等であると言えますが、厳密には、メッセージはオブジェクトに送信されます。メッセージはオブジェクトのメソッドリストで検索され、関連するメソッドが呼び出されます。**

書き直すことができます:

[[self view] addSubview:label];

したがって、メッセージviewは受信者であるに送信さselfます。その結果は、他のメッセージの受信側の位置になりますaddSubview:。あなたはlabelへの議論であることについて正しいですaddSubview:

したがって、英語では、これは次のようになります。「のサブビューとして追加するlabel」または「送信、渡す、」に送信した結果に。selfviewaddSubview:labelviewself


*ドット構文は、プロパティアクセス、つまりプロパティのsetterメソッドとgetterメソッドを使用するための砂糖として意図されています。デフォルトでは、ゲッターの名前はプロパティ自体の名前と同じです。

**メソッドが見つからない場合、オブジェクトはメッセージを使用して他のことを実行できます。このメソッド/メッセージの区別による唯一の実際の違いは、メッセージに関連付けられたメソッドを実行時に変更できることです。つまり、動的バインディングです。

于 2012-04-04T00:04:02.240 に答える
3

これは、のプロパティであるメソッドaddSubView:を呼び出します(おそらく、インスタンスまたは1つのサブクラスであり、引数としてvarラベルがあり、おそらくそれはインスタンスです。UIViewselfUIViewControllerUILabel

于 2012-04-04T00:03:07.743 に答える
0

このステートメントは、ビューself.view(親ビューの「自己」)にを指示していますaddSubview label

于 2012-04-04T00:03:15.740 に答える