Objective C 中的单例

Singleton in Objective C

下面的方法实际上做了什么?

(这是在 NSObject class 中创建的。)

+ (MyClass *)sharedInstance
{
    static MyClass *sharedInstance;

    static dispatch_once_t once;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });

    return sharedInstance;
}
- (NSArray *)myArray {
    ....
}

然后在另一个 class 中,我会这样调用 myArray

[[MyClass sharedInstance] myArray];

是否每次执行上述代码时都会调用sharedInstance?另外,如何在不先初始化的情况下调用 myArray ? (注意 myArray- 而不是 +

这是单例模式的常规实现。您拥有对 MyClass 的单个实例的静态引用,在您首次调用 +sharedInstance.

时分配

+sharedInstance 确实会在每次执行 [MyClass sharedInstance] 时被调用,但这应该不是问题。您也不应该在不使用单例的情况下调用 -myArray 。您只需分配一个本地实例并对其调用 -myArray 即可。