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
即可。
下面的方法实际上做了什么?
(这是在 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
即可。