0

クラスのパブリックグローバル変数とクラスのプロパティの違いは何ですか(Objective-Cは主にiOSプログラミング)。私が気付いた唯一のことは、ドットではなくポインター表記を使用する必要があることです->クラスのグローバル変数にアクセスします。

グローバルを使用するコードからプロパティを使用するコードへの変更は、プログラムの重大な変更になる可能性があることを読みました。それは本当ですか、もしそうなら、なぜですか?

ありがとう!

編集:

Block.h

パブリック グローバル変数 (だと思いますか?) [編集: これがインスタンス変数であることを理解しました、ありがとう]

@interface Block : GameObject {
    @public
   int type;
   SKEmitterNode *particles;}

財産

@property (nonatomic) CGFloat x;
4

2 に答える 2

3

いいえ、これは「グローバル変数」ではありません。

これをインスタンス変数と呼びます。

多くの場合 (必ずしもそうとは限りません)、プロパティには関連付けられたインスタンス変数がありますが、最新のコンパイラではそれが隠されています。

インスタンス変数を使用する場合の大きな違いは、プロパティは常にそのアクセサーを介してアクセスされることです (この場合はsetX:(CGFLoat)x?-(CGFloat)x`.

必要に応じて、これらのアクセサーを上書きして、たとえば変数がアクセスされるたびに特別な処理を行うことができます。

インスタンス変数を直接使用して、アクセサーをバイパスすることは常に可能です。自動合成された iVar の場合、これは_x.

->どちらの場合も は必要ないことに注意してください

于 2013-07-11T08:00:37.010 に答える
1

クラス プロパティでさえ、グローバルではありませんが、クラス変数によってサポートされています。

しかし、プロパティを使用すると、変数へのアクセスを保護するゲートキーパーが追加されます。

  • プロパティを読み取り専用にすることができます。
  • メモリ セマンティクスを微調整します (コピー、割り当てなど)。
  • KVO を使用すると、変更を自動的に伝播させることが容易になります。
于 2013-07-11T07:58:43.173 に答える