@synthesize幕后

时间:2015-03-17 14:44:40

标签: objective-c properties 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!
}

实际发生了什么以及上面列出的替代方案是正确的?

1 个答案:

答案 0 :(得分:4)

这可能是语义,但属性不再需要@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
}