单例
在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()
}