我正在调用其他类的方法,如下所示
@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。我错了吗?
由于
已更新:
答案 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]
作业,这将在性能和内存控制方面提供帮助。