4

誰かがここで何が起こっているのかを明確にすることができます. 私は、brainModel という名前のクラスを取得しました。これには、operandStack という名前の NSArray があります。「removeAllObjects」というメッセージを送信して配列にアクセスするだけです

self.brainModel.operandStack.removeAllObjects;

しかし、ドット表記を使用すると、「プロパティアクセス結果は未使用です - ゲッターは副作用に使用しないでください」という警告が表示されます。これはどういう意味ですか?

次のようにネストされたブラケット構文を使用すると、警告は表示されません。

 [[[self brainModel]operandStack]removeAllObjects];

両方とも動作します...ドット表記の間違った使用と関係がありますか? または、このようなオブジェクトにメッセージを送信するときにドット表記を使用することをお勧めします-「removeAllObjects」のような引数を送信します。

4

3 に答える 3

5

removeAllObjectsプロパティではありません。それは方法です。

プロパティは通常、同じ名前のメソッドを使用してアクセスされるため、プロパティアクセス表記の使用は機能します。ただし、プロパティの値を取得しても、オブジェクトを含むオブジェクトは変更されない(またはその他の変更が行われる)ことはないと予想されます。これは、の場合とは異なりremoveAllObjectsます。これらは、コンパイラーが参照している「副作用」です。

おそらく、代わりにこの呼び出しを実行することをお勧めします。

[self.brainModel.operandStack removeAllObjects];

これにより、のbrainModelプロパティが取得されself、次にのoperandStackプロパティが取得されself.brainModel、次にそれが呼び出さremoveAllObjectsれます。

于 2012-08-15T15:28:27.140 に答える
1

removeAllObjectsはメソッドです。ドット表記でメソッドにアクセスすることはできません。プロパティのみ。

于 2012-08-15T15:28:32.947 に答える
0

すべてのメソッドをプロパティとして宣言する必要はありません。特に、オブジェクトを変更している場合はそうではありません。ゲッターは、プロパティへのアクセサーと見なす必要があります(バッキングivarを直接公開することはありません)。たとえば、「アクション」であるメソッドは、そのように宣言されます(つまり、@propertyキーワードなしで宣言され、ドット表記の代わりに角かっこを使用して呼び出されます)。

于 2012-08-15T15:30:41.123 に答える