1

当我在 Objective C 中使用单例设计模式时,我发现很多人使用下面的代码来创建它。

@interface Base : NSObject {} 

+(id)instance;
@end

@implementation Base

+(id) instance
{

static id theInstance = nil;

    if (theInstance == nil)
    {
        theInstance = [[self alloc] init];
    }
    return theInstance;
}

@end

在这里,我没有明白为什么我们必须在方法中将静态变量分配给 nil,而是可以在方法外部声明并分配给 nil。因为每次调用 +instance() 方法时,Instance 变量都会被赋值为 nil。它不会丢失它之前指向的对象吗?

我试过调试它,令人惊讶的是,当调用 +instance() 方法时它不会指向 nil。谁能解释一下这里发生了什么?

4

1 回答 1

2

static变量只被初始化一次,无论它们是在全局范围内还是在本地范围内。在这种情况下,您甚至不需要nil-static默认情况下将存储类变量初始化为零。本声明:

  static id theInstance;

足以与您那里的相同。

于 2013-06-05T06:10:30.143 回答