当我们创建属性并为其定义合成时,编译器会自动创建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!
}
实际发生了什么以及上面列出的替代方案是正确的?
答案 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
}