2

私は目的の C を使用して開発する方法を学ぼうとしています。この本を読んで、ドット構文 (obj.var) を使用してクラスから ivar にアクセスするには、@properties を使用してこれらの変数を実装する必要がありますが、これを使用してみましたこれらの変数に対して @properties を定義せずにアクセスすると、正常に機能するように見えました。

この種のアクセスはどのように機能しますか? Java のように使用することをお勧めしますか?

例:

ComplexNumber *c1 = [[ComplexNumber alloc]init];
c1.realPart = 3;
c1.imaginaryPart = 2;

ComplexNumber のメソッド:

- (double)modulus;
-(void)setRadius:(double)aRadius phase:(double)aPhase;
-(void)print;
-(double)realPart;
-(double)imaginaryPart;
-(void)setRealPart:(double)value;
-(void)setImaginaryPart:(double)value;
4

2 に答える 2

6

プロパティは、クラスが特定のメソッドを実装するという単なる約束です。ドット構文は、コードの実行内容に応じて、適切な名前のメソッドへの呼び出しに単純に変換されます。

b = a.foo;          // becomes 'b = [a foo];'
a.foo = b;          // becomes '[a setFoo:b];'

したがって、メソッドがプロパティではない場合でも、ドット構文を使用してメソッドを呼び出すことを実際に回避できます。lengthメソッドが、配列のメソッドへのアクセスなど、プロパティのように機能するものを表している場合、それはある程度問題ありません。

len = myArray.length // becomes 'len = [myArray length];'

しかし、ほとんどの場合、それを行うべきではありません。プロパティではないものを取得して、プロパティのように見せます。うまくいくかもしれませんが、コードを見る人を混乱させるでしょう (未来のあなたも含めて)。プロパティアクセサーには副作用があるとは想定されていないため、副作用のあるメソッドを呼び出すためにこれを使用しないでください。

于 2012-10-22T19:32:23.793 に答える
4

いいえ、それは良い習慣ではありません。技術的にはドット構文を使用してゼロ引数メソッドにアクセスできますが、Xcodeはこれを行うことについて警告します。これはAppleのコーディングガイドラインに反しています。

メソッドの呼び出しにはブラケット構文を使用する必要があります。

于 2012-10-22T19:23:22.017 に答える