0

Appleガイドからのインスタンス変数の参照を理解しようとしていますが、これを理解するのに問題があるとApple Docは言います

...インスタンス変数がレシーバーではないオブジェクトに属している場合、オブジェクトの型は、静的型付けによってコンパイラーに対して明示的にする必要があります。静的に型付けされたオブジェクトのインスタンス変数を参照するには、構造体ポインター演算子 (->) が使用されます。たとえば、Sibling クラスが静的に型指定されたオブジェクト Twin をインスタンス変数として宣言するとします。

@interface Sibling : NSObject
{
     Sibling *twin;
     int gender;
     struct features *appearance;
}

静的に型指定されたオブジェクトのインスタンス変数がクラスのスコープ内にある限り (ツインは同じクラスに型指定されているため、ここにあるため)、Sibling メソッドはそれらを直接設定できます。

- makeIdenticalTwin 
{
    if ( !twin ) 
    {
        twin = [[Sibling alloc] init];
        twin->gender = gender;
        twin->appearance = appearance;
    }
    return twin; 
}
4

1 に答える 1

1

インスタンス変数を参照することは、クラス インスタンス vars にアクセスすることを意味します

例えば:

@interface ClassA : NSObject
{
   int value;
}

- (void) setValue:(int) val;

@implementation ClassA
- (void) setValue:(int) val
{
   //here you could access class a value variable like this
   value = val;
}

他のクラスの変数にアクセスするようになりました。たとえば、このクラスを取ります

@interface ClassB : ClassA
{
   ClassA aClass;
}

- (void) setValueInAClass:(int) val;

@implementation ClassB
- (void) setValueInAClass:(int) val
{
   //class b could access variables from class a like this
   aClass->value = val;
}

「->」を使用するとクラス a のカプセル化が壊れるため、99% のケースで「->」を使用してクラス変数を参照することは間違いです。

于 2012-06-08T14:47:03.750 に答える