クラスの外側から私のivarsにアクセスするためのプロパティを持つクラスを定義できます。効率のためにクラスの外部から直接ivarアクセスを使用することは可能ですか?
私もちょうどmyInst-> IVAR構文C-構造体の形でアクセスするために使用することができます。 C++で
、私はアクセサとなるだろうが、Objective-Cで、私は直接アクセスしたい場合があり、いくつかのケースがあります。メッセージングシステムは、C++メソッドのようにインライン化されていないため、いくつかのコンテキストで重要なアクセッサのパフォーマンスが大幅に低下します。
たとえば、スカラーと呼ばれるivarとプロパティが定義されたクラスでは、この中にCPUのほとんどを取るでしょうアクセサを呼び出しを使用しているので、i>はスカラーをmyinst-する[MYINSTスカラー]を変更する場合は、この方法はより速く多くのことを実行します
-(void) doWorkWithMyClass:(MyClass*)myinst
{
// array and other locals declaration omitted
for (int i = 0; i < reallyBigX; i++) {
result += [myinst scalar] * array[i];
[myinst computeNextScalar:i];
}
}
:スカラーは、単純なfloat値でありますループ。
C++、私が直接IVARのアクセスは、一般的に推奨されて理解しますが、この文脈では、スピードの問題と同じように、それが許容できるのですか?そうでなければ、依然としてobjective-cクラスを使用するより好ましいメソッドがありますか?
通常、CまたはC++で直接パフォーマンスを重視する部分を実行します。 –
アクセサーを使用すると、どの程度パフォーマンスが低下しますか?あなたは "大きなパフォーマンスのヒット"を定量化しましたか、ivarに直接アクセスするのがどれほど早いか、この先制的な仮定ですか? –
@GeorgFritzscheはい、私はこれを通常行いますが、これは多態性、NSCoding、およびrefsをstruct/C++クラスとobj-cクラスに分割するのではなく、1つのクラスインターフェイス内でカウントしたいときにポップアップしたケースです。 –