Objective-C是否自动生成setter和getter?

Objective-C是否自动生成setter和getter?,objective-c,Objective C,我正在从另一个类调用一个方法,如下所示 @property (nonatomic,strong) CalculatorModel *calculatorModel; double result = [self.calculatorModel result:operator]; 但是,此方法没有收到来自调用方的消息。直到我写下了我自己的getter - (CalculatorModel*)calculatorModel { if (!_calculatorModel) _calcula

我正在从另一个类调用一个方法,如下所示

@property (nonatomic,strong) CalculatorModel *calculatorModel;

double result = [self.calculatorModel result:operator];
但是,此方法没有收到来自调用方的消息。直到我写下了我自己的getter

- (CalculatorModel*)calculatorModel {
    if (!_calculatorModel) _calculatorModel = [[CalculatorModel alloc]init ];
    return _calculatorModel;
}
它是有效的。为什么,我记得一旦你做了@property,Objective-C就会自动生成setter和getter。我错了吗

谢谢

更新:

Objective-C是否自动生成setter和getter


好吧,与其说是编译器,不如说是的,Clang的最新版本有这个功能。你不再需要手动合成属性。

似乎你不再需要从xCode4.5手动合成属性了。IDE会帮你做到这一点。但可怕的是,如果你在xCode4.3或xCode4.4上打开你的项目,它不会工作,会出现很多警告,然后您应该自己添加代码。

您是对的。但是,您仍然必须使用
[[Class alloc]init]
初始化属性。就像我们为
NSMutableArray
设置属性一样,
@property(非原子,强)NSMutableArray*anArrayanArray
之前,必须将其初始化为
\u anArray=[[NSMutableArray alloc]initWithCapacity:10]


-(CalculatorModel*)CalculatorModel
方法称为惰性实例化,它将在调用之前接管
[[Class alloc]init]
作业,这将在性能和内存控制方面提供帮助

是的,这就是属性的要点。你是对的,但是合成的getter不会像你那样懒洋洋地分配请求属性的实例。这就是将消息“result”发送到的原因nil@AnoopVaidya添加了“更多”以使其更完美:PYou也可以说“这可从XCode4.4+获得”:@AnoopVaidya我更喜欢xxd的答案,我认为重点是懒惰的实例化。@TomH:你的标题说的是其他东西,你的问题说的是其他东西。他选择了另一点来讨论@H2CO3:我没有,downvote需要125的声誉,但是我从我的问题中看到你有-4的声誉。无论如何,仍然感谢你回答了我的问题。好吧。明白你的意思了。getter和setter只返回指针的属性值。如果你的属性不是init,它仍然是nil,那么,将nil返回给你。如果你不给它任何东西,它总是会回报你给它的东西。