Objective-C会自动生成setter和getter吗?

时间:2013-03-06 08:04:34

标签: objective-c

我正在调用其他类的方法,如下所示

@property (nonatomic,strong) CalculatorModel *calculatorModel;

double result = [self.calculatorModel result:operator];

但是此方法未收到来自呼叫者的消息。直到我写了我自己的吸气剂

- (CalculatorModel*)calculatorModel {
    if (!_calculatorModel) _calculatorModel = [[CalculatorModel alloc]init ];
    return _calculatorModel;
}

它有效。为什么,我记得你做过@property之后,Objective-C会自动生成setter和getter。我错了吗?

由于

已更新:enter image description here

3 个答案:

答案 0 :(得分:3)

  

Objective-C会自动生成setter和getter吗?

嗯,而不是编译器,但是的,Clang的最新版本具有此功能。您不再需要手动合成属性。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你是对的。但是,您仍然必须使用[[Class alloc] init]初始化该属性。就像我们设置NSMutableArray@property (nonatomic, strong) NSMutableArray *anArray;的属性一样,在您使用anArray之前,您必须将其初始化为_anArray = [[NSMutableArray alloc] initWithCapacity:10];

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