2

私はいくつかのチュートリアルに従ってきましたが、@property別のクラスである私のクラスのインスタンス変数に関する質問があります。

@interface Rectangle : NSObject{
    int width;
    int height;
    XYpoint *origin;
}

@property int width, height;

XYpointクラスが別のファイルにあり、すべて正常に動作します。しかし、私がフォローしているチュートリアルでは、メインプログラムで「Rectangle *r」を作成し、次のように原点変数でドット構文を使用します。

r.origin = ****;

オブジェクト変数を追加する方法を探して@propertyいましたが、何も見つかりませんでした。いくつかの方法で追加しようとしましたが、成功しませんでした。誰かがこれで私を助けてくれることを願っています。

別のものを追加するようなことを試しました:

 "@property XYpoint *origin" and "@synthesize *origin"

また、アスタリスクなし、および他のいくつかの方法。

4

3 に答える 3

2

すでにインスタンス変数XYpoint *originがあるので、必要なのは、そのインスタンス変数に基づくプロパティを作成して合成することです。私は通常、ivar にアンダースコア プレフィックスを使用して、シャドウイングの警告を混乱させたり、誤って間違った警告を参照したりしないようにしますが、それはあなた次第です。このようなもの:

@interface Rectangle : NSObject {
    XYpoint *_origin;
}

@property (nonatomic, strong) XYpoint *origin;

@end

@implementation

@synthesize origin = _origin;

// rest of your class

@end

そのクラスを使用すると、ドット構文を使用してプロパティを参照できるようになります。

Rectangle *rect = [[Rectangle alloc] init];
XYpoint *pointFromRect = rect.origin;
于 2012-07-10T04:23:30.007 に答える
1

プロパティは、objective-c の非常に基本的な基本部分であるため、他のことを行う前にそれらを習得する必要があります。プロパティにが必要かどうかは*、変数の種類によって異なります。スタック変数 (struct、int、float など) の場合、通常は必要ありません。ヒープ オブジェクト (任意のクラス) の場合は、それが必要です。*ただし、合成時にが必要になることはありません。また、明示的な iVar を宣言する必要はありません。コンパイラが自動的に作成します。これはしばらくの間そうでした。

これを読む -> Objective-C プログラミング言語 : 宣言されたプロパティ

于 2012-07-10T04:23:40.167 に答える
0

@propertyと@synthesizeを使用して、ゲッターとセッターを自動的に作成し、オブジェクト/変数にアクセスして他のクラスにアクセスできるようにします。wquistが述べたように、@synthesizeにはアステリックスは必要ありません。ほら、幅と高さのプロパティを作成しました。それらは同じ目的を持ち、他のクラスでアクセスします。

于 2012-07-10T04:25:13.413 に答える