在OC中,我们通常通过使用GCD的dispatch_once方法实现单例(singleton)
@interface SingletonSample : NSObject
+ (instancetype)sharedInstance;
@end
@implementation SingletonSample
+ (instancetype)sharedInstance {
static dispatch_once_t SingletonSampleOnceToken;
dispatch_once(&SingletonSampleOnceToken, ^{
sharedInstance = [[[self class] alloc] init];
});
return sharedInstance;
}
- (id)init {
if (sharedInstance != nil) {
return nil;
}
if ((self = [super init])) {
}
return self;
}
@end
public class MySingleton {
public static let sharedInstance = MySingleton()
public var title = "" // 用于测试单例
private init () {} // 必须用private修饰,在外部调用init时,提示调用错误
}
//let mySingleton = MySingleton()
//Error: MySingleton cannot be constructed because it has no access initializer
let mySingetonA = MySingleton.sharedInstance
mySingetonA.title = "boo"
let mySingetonB = MySingleton.sharedInstance
mySingetonB.title = "foo"
print(mySingetonA.title)