我是C的新手,是 objective-c 的新手。对于iPhone子类,我在@interface类定义中将变量声明为对类中的所有方法可见,例如

@interface myclass : UIImageView {
    int aVar;
}

然后我再次声明为
@property int aVar;

然后我
@synthesize aVar;

您能帮助我理解三个步骤的目的吗?我在做不必要的事情吗?

谢谢。

最佳答案

在这里,您要声明一个名为aVar的实例变量:

@interface myclass : UIImageView {
    int aVar;
}

现在,您可以在类(class)中使用此变量:
aVar = 42;
NSLog(@"The Answer is %i.", aVar);

但是,实例变量在Objective-C中是私有(private)的。如果您需要其他类来访问和/或更改aVar怎么办?由于方法是在Objective-C中公开的,因此答案是编写一个返回aVar的访问器(getter)方法和设置aVar的mutator(setter)方法:
// In header (.h) file

- (int)aVar;
- (void)setAVar:(int)newAVar;

// In implementation (.m) file

- (int)aVar {
    return aVar;
}

- (void)setAVar:(int)newAVar {
    if (aVar != newAVar) {
        aVar = newAVar;
    }
}

现在其他类可以通过以下方式获取并设置aVar:
[myclass aVar];
[myclass setAVar:24];

编写这些访问器和更改器方法可能会非常繁琐,因此Apple在Objective-C 2.0中为我们简化了它。我们现在可以写:
// In header (.h) file

@property (nonatomic, assign) int aVar;

// In implementation (.m) file

@synthesize aVar;

...访问器/更改器方法将自动为我们生成。

总结一下:
  • int aVar;声明实例变量aVar
  • @property (nonatomic, assign) int aVar;声明aVar的访问器和mutator方法
  • @synthesize aVar;实现aVar的accessor和mutator方法
  • 10-07 21:07