在 Standford IOS tutorials 之一中,讲师使用惰性实例化来创建计算器引擎类的实例。
他使用了 my former question 中公开的第二种语法:
@synthesize myTextField = _myTextField;
在此语法中,getter myTextField
的名称与 _myTextField
不同,因此可以进行测试
if (_myTextField != nil) { ... }
由于 getter 和实例变量名称相同 (myTextField
),我该如何使用经典的第一语法来做到这一点?
最佳答案
如果您使用@sythensize variableName = _variableName;
,那么实例变量将被称为_variableName
,这就是您需要用来直接访问它的名称。 variableName
是将用于生成 setter 和 getter 的名称,因此 self.variableName 或 [self setVariableName:...]
如果您使用 @synthesize variableName;
,那么实例变量将与合成的 setter 和 getter 同名。您仍然可以使用 variableName = ...
访问实例变量,但更容易混淆您应该使用哪个
所以 2 延迟加载实现
@synthesize varName = _varName
- (id)varName
{
if (!_varName)
_varName = [[NSObject alloc] init];
return _varName;
}
或
@synthesize varName;
- (id)varName
{
if (!varName)
varName = [[NSObject alloc] init];
return varName;
}
就我个人而言,我喜欢 @synthesize varName = _varName
当您访问变量时,当您指的是 setter 时,它更容易阅读并且更难混淆,反之亦然
关于iphone - 如何在 objective-c 中进行惰性实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588216/