OC单利
#import "HttpTools.h"
+ (instancetype)shareManager;
#import "HttpTools.m"
+ (instancetype)shareManager
{
static id instance;
static dispatch_once_t onceToken;
// onceToken默认等于0, 如果是0就会执行block, 如果不是0就不会执行
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
Swift单利
推荐使用
// HttpTools.swift
static let instance: HttpTools = HttpTools()
class func shareHttpTools() -> HttpTools {
return instance
}
仿OC版
// 在Swift中, 类方法中是不允许定义静态变量的
static var once_t: dispatch_once_t = 0
static var instance: HttpTools?
/// 用于获取单粒对象的类方法
class func shareHttpTools() -> HttpTools{
dispatch_once(&once_t) { () -> Void in
instance = HttpTools()
}
return instance!
}
单利优缺点
优点:
1:一个类只被实例化一次,提供了对唯一实例的受控访问。
2:节省系统资源
缺点:
1: 单例对象一旦建立,对象指针是保存在静态区的,单例对象在堆中分配的内存空间,会在应用程序终止后才会被释放。
2: 单例类无法继承,因此很难进行类的扩展。
3: 单例类的职责过重,在一定程度上违背了“单一职责原则”。
4: 单例不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。