2012-05-08 16 views
3

パーティクルの位置など、頻繁にアクセスされる変数に@propertyを使用する必要がありますか? @propertyはメソッドの呼び出しのオーバーヘッドを追加する変数のgetterとsetterを作成します。ほとんどの状況でこれは目立つことはありませんが、プロパティが1秒間に何百万回もアクセスされた場合(異なるインスタンス内で)はどうでしょうか?@propertyの使い方

答えて

4

Objective-Cランタイムが@propertyアクセサのために一定量のオーバーヘッドを追加することは間違いありません。しかし、これはObjective-Cクラス間で情報を共有するために受け入れられる方法です。アプリケーションを測定し、@propertyのオーバーヘッドが実際に処理のボトルネックであると判断した場合にのみ、別のアプローチを検討する必要があります。唯一MHzの範囲内にある「毎秒百万回の」

は、現代のプロセッサはGHzの範囲で動作することに注意してください、と何かが起こって。チャンスは、あなたのボトルネックはどこかにあるでしょう。

あなたがを行う場合は、常に大きなObjective-CのクラスParticleCloudの内側に簡単なParticle構造体の配列であなたのパーティクル処理を行うことができ、問題を抱えています。これにより、残りのプログラムは、アクセサの必要性を排除しながら、Particleオブジェクトの正確な実装を無視することができます。

1

実際にゲッターとセッターを使用していますか?そうでない場合は、プロパティを使用しないでください。そうなら、それを使用してください。オーバーヘッドが重要かどうかを知る唯一の方法は、独自のパフォーマンステストを行い、プロセスの前後の時間を記録し、まったく同じシミュレーションを実行し、経過時間を比較することです。それがパフォーマンスヒットだが無視できる場合は、それを心配しないでください。あなたは、あなたが使用している他のどのメソッドよりも@propertyを持っている方が速いことがわかります。

0

私の意見では、オブジェクトのプロパティには@propertyを使用する必要があります。私はそれがばかげて聞こえることを知っていますが、プロパティによって私は他のクラスからアクセスできる "パブリック"属性を意味します。あなたのクラスだけがその属性を必要とするならば、あなたの実装の中でそれを非公開にしてください。物事はもっとスムーズできれいになります。

@propertyの利点の1つは、それらを読み込み専用(つまりセッターなし)にするかどうかを指定できることです。だから、それは本当に公開APIの問題です。