Swift

iOS - Swift中的单例声明方法

2022-05-14  本文已影响0人  俺不是大佬儿

单例在iOS开发中是一个很常见的模式。

对于一些希望能在全局方便访问的实例,或者在App 的生命周期中只应该存在一个的对象(只会被初始化一次)我们一般都会使用单例模式来存储和访问

Objective-C 中单例常用声明方法:

使用GCD 中的dispatch_once_t 保证里面的代码只会被调用一次,以此保证单例在线程上的安全

以我封装的一个HTTPService请求类为例:

#pragma mark -  HTTPService
+ (instancetype)sharedInstance {
    static HTTPService *service_ = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        service_ = [[HTTPService alloc] init];
    });
    return service_;
}

Swift 中单例声明方法:

Swift 中可以使用let修饰保证线程安全

同样以一个请求类(OrigRequest)为例
第一种

class OrigRequest: NSObject {
    //第一种
    class var sharedRequest:OrigRequest{
        struct Static {
            static let sharedInstance:OrigRequest = OrigRequest()
        }
        return Static.sharedInstance
    }
  }

第二种

private let sharedInstance = OrigRequest()

class OrigRequest: NSObject {
    //第二种
    class var sharedRequest:OrigRequest {
        return sharedInstance
    }
   } 

第三种(最简单的方法)

class OrigRequest: NSObject {
    //第三种
    static let sharedRequest = OrigRequest()
}

\color{gray}{欢迎大佬儿来指正纠错,共同学习😏!!}

上一篇下一篇

猜你喜欢

热点阅读