Swift でシングルトン

単純なシングルトン

class Feature {
    static let instance = Feature()
}
  • 最初のアクセスのときにインスタンスが作られる。
  • スレッドセーフである。

明示的に初期化・開放するシングルトン

class Feature {
    static var instance: Feature {
        return _instance
    }

    static func initializeInstance() {
        _instance = Feature()
    }

    static func finalizeInstance() {
        _instance = nil
    }

    private static var _instance: Feature! = nil
}
  • スレッドセーフではない。でも明示的にインスタンスするならそこは使う側が注意している前提。

その他の考慮

  • init を private にすれば、外部でのインスタンス作成を防げる。でも使う側はそんなバカではないはずだし、仮に間違った使い方をされたら議論したいのでオープンにしておきたい。
  • Objective-C でも使うなら public クラスにして NSObject を派生し、 init を override。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です