iphone - 如何在 objective-c 中进行惰性实例化?

标签 iphone objective-c cocoa

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/

相关文章:

iphone - 快速从 tabbarcontroller 执行 segue

objective-c - Cocoa,如何在 NSTextView 中选择文本

objective-c - NSNotification 是检测变化的正确选择吗?

cocoa - Cocoa 文件操作的线程语义是什么?例如NSData 读/写方法

iphone - 如何使用 WiFi 以编程方式将 iPhone 连接到另一部 iPhone 或 iPad?

iphone - 从 ViewController 调用 facebook,而不是从 appdelegate

iphone - 查找 UITableView 中 UIButton 的 X、Y 坐标

objective-c - iOS 7 sizeWithAttributes : replacement for sizeWithFont:constrainedToSize

objective-c - IOS 上的波形

objective-c - 如何在 Cocoa 中解析 XML?