@property
粒子の位置など、非常に頻繁にアクセスされる変数に使用する必要がありますか? @property
メソッドを呼び出すオーバーヘッドを追加する変数のゲッターとセッターを作成します。ほとんどの場合、これは目立ちませんが、プロパティが 1 秒間に最大 100 万回 (異なるインスタンス内で) アクセスされる場合はどうなるでしょうか?
3 に答える
@property
Objective-C ランタイムがアクセサーに一定量のオーバーヘッドを追加することは間違いありません。ただし、これは Objective-C のクラス間で情報を共有する方法として認められています。アプリケーションを測定し、@property
オーバーヘッドが実際に処理のボトルネックであると判断した場合にのみ、別のアプローチを検討してください。
最新のプロセッサはGHz範囲で動作し、「1 秒間に 100 万回」発生することはMHz範囲でのみ発生することに注意してください。ボトルネックは別の場所にある可能性があります。
問題が発生した場合Particle
は、より大きな Objective-CParticleCloud
クラス内の単純な構造体の配列に対していつでも粒子処理を行うことができます。これにより、プログラムの残りの部分がParticle
オブジェクトの正確な実装を無視できるようになり、@property
アクセサーの必要性がなくなります。
実際にゲッターとセッターを使用していますか?そうでない場合は、プロパティを使用しないでください。もしそうなら、それを使用してください。オーバーヘッドが大きいかどうかを知る唯一の方法は、独自のパフォーマンス テストを行い、プロセスの前後の時間を記録し、まったく同じシミュレーションを実行して経過時間を比較することです。パフォーマンスへの影響が無視できる程度であれば、心配する必要はありません。@property を使用すると、使用している他の方法よりも高速であることに気付くかもしれません。
私の意見で@property
は、オブジェクトのプロパティには a を使用する必要があります。ばかげているように聞こえますが、プロパティとは、他のクラスからアクセスできる「パブリック」属性を意味します。クラスだけがその属性を必要とする場合は、実装内でそれを非公開にすると、物事がよりスムーズでクリーンになります。
@property の利点の 1 つは、それらを読み取り専用 (つまり、setter なし) にするかどうかを指定できることです。したがって、それは実際にはパブリック API の問題です。