2

開発の初期の頃、私は自分が書いたすべてのプログラムで常にインスタンス変数を作成し始めました。しかし、プロパティの力に到達した後、私たちはiVarsを使用する必要がないと感じました。

しかし、コードをデバッグする必要があるときに、iVarが欠落しているために、カスタムエンティティの値をデバッグするのが難しいことに気付きました。

現在、すべてのカスタムインターフェイスの実装にiVarを搭載することを計画しています。

私が行っていることが良い習慣であるかどうかを確認してください。トレードオフがありますか?

Objective CでiVarsを使用する必要がある他の理由はありますか?

4

3 に答える 3

5

プロパティを使用してiVarを「使用していない」わけではありません(ほとんどの場合)。コンパイラに生成させているだけです。私は、関係のない外部のクラス(フラグなど)にさらされたくないもののために、プライベートで保護されたiVarを頻繁に使用します。プロパティは、定義されたゲッター(および場合によってはセッター)と結合されたiVarです。明示的なiVarを回避することで何が得られると思うかわかりません。

于 2012-06-11T09:13:31.567 に答える
3

まず、動的なランタイム処理が行われている場合(たとえば、のサブクラスを使用している場合NSManagedObject)、またはプロパティがカスタムゲッター/セッターで完全に実装されている場合を除き、プロパティは常にインスタンス変数によってサポートされます。

プロパティを合成すると、インスタンス変数が作成されます。宣言でインスタンス変数を明示的に宣言できます@interface {}が、これを行う必要はなくなりました。

通常、インスタンス変数ではなくプロパティを使用することをお勧めしますが、インスタンス変数に直接アクセスする必要がある場合もあります。たとえば、initメソッドのベストプラクティスは、プロパティアクセサーを使用してオブジェクトを設定することを避けることです。これは、サブクラスがプロパティアクセサーをオーバーライドし、オブジェクトが完全に初期化される前に何かを実行しようとする可能性があるためです。カスタムゲッター/セッターメソッドもインスタンス変数を直接使用する必要があります。

于 2012-06-11T09:16:57.837 に答える
2

プロパティと@synthesizeステートメントを宣言すると、コンパイラはアクセサメソッドでインスタンス変数を作成します。詳細については、このリンクを参照してください。Objective-Cでivarを使用する必要がありますか?

于 2012-06-11T09:14:25.157 に答える