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,您可以自动创建getter 和setter,以便您可以访问其他类的对象/变量。正如 wquist 所提到的,您的 @synthesize 不需要 asterix。看,您已经创建了宽度和高度的属性。他们有相同的目的,在其他类中访问。

于 2012-07-10T04:25:13.413 回答