2012-01-02 15 views
3

私はObjective Cを数ヶ月間使用していますが、これは初めてこの種の構文を目的語cで見ています。私はそれに相当することを知っていると思うが、私は確信したかった。ブラケット+ドットの構文の問題

具体的には、コードは「[プレーヤーのテクスチャが]に相当.contentSize.heightれる何この

float imageHeight = [player texture].contentSize.height; 

のように見えますか? 私はドットとブラケットの構文は同じこと

something.backgroundColor = [UIColor redColor]; 
[something setBackgroundColor:[UIColor redColor]]; 

上記の二つはほとんど同じですことができることを知っている...

これが私の最初の例では何が起こっているかですか?私はブラケットとドットシンタックスの組み合わせを見たことがない。

ありがとうございます。

答えて

4
float imageHeight = [player texture].contentSize.height; 

これはおそらく同じものです:ポインタをオブジェクトに適用されますとき、ドットシンタックスは、適切なプロパティのアクセッサメソッドの呼び出しに変換

float imageHeight = [[player texture] contentSize].height; 

。構造体に適用すると、その構造体のフィールドの1つに直接アクセスできます。

したがって、[player texture]がオブジェクト(おそらくイメージ)へのポインタを返すと仮定すると、ドット構文の最初の使用はそのオブジェクトのcontentSizeプロパティにアクセスします。 -contentSizeがオブジェクトポインタも返すと、次の使用はアクセッサの呼び出しにも変換されます。ただし、contentSizeプロパティはNSSizeであり、NSSizeはwidthおよびheightフィールドの構造体です。したがって、ドット構文の2番目の使用は、おそらくその構造からheightフィールドを取得します。ドット構文の二つの異なる意味をミキシング

は値を取得ために正常に動作しますが、あなたはセット値にそれを使用しようとすると、エラーが発生します。前の段落の私の前提が正しいなら、あなたはこれをすることができません:

+0

Doh! ありがとうございます。 =] –

+2

-1が間違っています。 '-texture'は' CGRect'を返すか、 '-contentSize'が' CGSize'を返すオブジェクトを返すか、 '-contentSize'が' height'プロパティを持つオブジェクトを返すことができます。エルゴ、それらが同等であるというあなたの前提は、ほぼ間違いです。 –

+0

うーん..ここで私は正確に何を見ているのですか? –