2

重複の可能性:
スタイル:Objective-C2.0でのドット表記とメッセージ表記
Objective-Cプロパティアクセス

noob-questionに賛成する前に、この質問に関して何を検索すればよいかわかりません。とにかく、imageviewの背景色を変更しようとしているとしましょう。違いは、次のとおりです。

imageView.backgroundColor = [UIColor orangeColor];

[imageView setBackgroundColor:[UIColor orangeColor]];

私は最初のものが実際の値を取得するために使用できることを知っています、それは私が言うことができます

UIColor *imageViewColor = imageView.backgroundColor;

そして、私はもう一方でこれを行うことはできませんが、なぜもう一方が存在するのですか?それとも、値を設定する方法として最初のものを使用するのは単に間違っていますか?しかし、なぜそれが機能するのですか?

ちなみに、この質問は、imageViewの背景色を変更することについては特別なことは何もしていません。私は一般的に、実際の違いは何であるかを尋ねています。

4

3 に答える 3

4

何もない。それらは同等です。

(まあ、構文は異なります。)

ところで、

そして、私は他の人とこれを行うことはできません

真実ではない。どちらの表記にも、setter構文とgetter構文があります。

object.property = value;

と同等です

[object setProperty:value];

variable = object.property;

と同等です

variable = [object property];

さらに、

しかし、なぜもう一方が存在するのでしょうか。

古いバージョンのObjective-C( "Objective-C 1.0")には、プロパティがなかったためです。setterメソッドとgetterメソッドを手動で実装する必要があり、これは一般的に受け入れられている命名規則でした。

それとも、値を設定する方法として最初のものを使用するのは単に間違っていますか?

いいえ、そうではありません。

しかし、なぜそれが機能するのですか?

それは「間違っている」わけではないので、それが理由です。(でも、ググってみませんか?)

于 2013-01-11T19:43:00.623 に答える
3

ドット表記は、値にアクセスするための短い形式の方法です@property。この関連するSOの質問を参照してください:Objective-Cプロパティアクセス

コンパイラは、コンパイル時にfoo.propertyを[fooプロパティ]に変換します

宣言されたプロパティのドット表記とメッセージ表記の質問では、一方のスタイルを他方よりも選択するメリットについて説明しています。

于 2013-01-11T19:42:56.980 に答える
0

簡単に言えば、実行に関しては 2 つはまったく同じです。

さて、より正確に言うと、Objective-C は 2.0 でプロパティを追加しました。ドット構文は、プロパティでアクセサー メソッドを呼び出す簡単な方法です。アクセサー メソッドは、プロパティの値を取得または設定するために使用するメソッドです。ゲッターやセッターと呼ばれることもあります。

では、あなたが言うとどうなりますimageView.backgroundColor = someColorか?基本的に、コンパイラは setBackgroundColor メソッドを探し、そのメソッドを呼び出します。同様に、 という場合UIColor *color = imageView.backgroundColor、コンパイラはbackgroundColorUIColor を返すメソッドを探し、そのメソッドを呼び出します。

ここで理解しておくべきことは、ドット構文は実際には、プロパティでアクセサー メソッドを呼び出す場合にのみ使用する必要があるということです。Objective-C では、一般的なメッセージ送信にドット構文を使用できますが、これではプロジェクトで何が起こっているのかがわかりにくくなり、コードの保守性が大きな問題になります。

于 2013-01-11T19:46:10.440 に答える