iOS Singleton

166 阅读1分钟

单例写法

在OC中,我们通常是采用dispatch_once函数来帮助我们实现单例。dispatch_once可以保证马上执行函数并且线程安全。

+ (instancetype)sharedInstance {
  static id _instance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    _instance = [[self alloc] init];
  });
  return _instance;
}

在Swift中,可以使用static来修饰一个类型属性,这样的话保证了只会进行一次的延迟实例化并且是线程安全的。

class Singleton {
  static let sharedInstance = Singleton()
}

如果你想要在初始化的时候设置其他属性的话,也可以使用下面的方法

class Singleton {
  static let sharedInstance: Singleton = {
    let instance = Singleton()
    // setup code
    return instance
  }()
}

参考链接:

  1. Using Swift with Cocoa and Objective-C (Swift 3.0.1)