iOS逆向

Swift之单例

2022-06-14  本文已影响0人  小羊爱学习

单例是一个在Cocoa 中很常见的模式了。对于一些希望能在全局方便访问的实例,或者在App 的生命周期中只应该存在一个的对象,我们一般都会使用单例来存储和访问。在Objective-C 中单例的公认的写法类似下面这样:

//使用GCD 中的dispatch_once_t 可以保证里面的代码只被调用一次,以此保证单例在线程上的安全。
+ (instancetype)sharedManager {
    static Object *obj = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        obj = [[Object alloc] init];
    });
    return obj;
}

在Swift 中由于废弃了原有的Dispatch once方法,因此无法使用once 进行单例的创建。
我们使用一个struct 来存储类型变量。并且我们使用一个更简单的保证线程安全的方式,那就是let。
我们使用一个struct 来存储类型变量。并且我们使用一个更简单的保证线程安全的方式,那就是let。

class Manager {
    class var sharedManager: Manager {
        struct Static {
            static let sharedInstance: Manager = Manager()
        }
        return Static.sharedInstance
    }
}

还有一种方法更受大家欢迎的做法。与上方的写法类似:

class Manager {
    class var sharedManager: Manager {
        return sharedInstance
    }
}

private let sharedInstance = Manager()

最后一种方法更受大家喜欢,也最简单。如果没有特别的需求,建议都使用这样的方式实现单例。

class Manager{
  static let sharedInstance = Manager()
}
上一篇 下一篇

猜你喜欢

热点阅读