@synthesize 幕后

@synthesize behind the scenes

当我们创建一个 属性 并为其定义一个 synthesize 时,编译器会自动创建 getter 和 setter 方法,对吗?

现在,如果我执行这个命令:

@property(nonatomic) int value;

@synthesize value;

value = 50;

会发生什么:

编译器将值“50”保存在 属性?

property (nonatomic) int value; // Here is the stored value 50!

或者编译器在后台创建一个与 属性 同名的变量,如下所示:

interface myClass: NSObject {
    int value; // Here is the stored value 50!
}

实际发生了什么,上面列出的备选方案是正确的吗?

可能是语义,但属性不再需要 @synthesize。编译器会自动完成。

但是为了回答您的问题,编译器创建了一个实例变量来存储 属性 的值。

@property (nonatomic, assign) NSInteger value;
// an instance variable NSInteger _value; will be created in the interface.

如果您需要在不通过 属性 的情况下访问它,您可以在自己的代码中使用实例变量。这在覆盖 setter 时很常见,例如:

- (void)setValue:(NSInteger)value {
    _value = value;
    // custom code
}