一 、OC中單例的寫法:1.普通單例的寫法? 2. 利用多線程來寫單例
#pragma mark --- 普通單例寫法----
+ (Manager *)shareInstance{
static Manager *manager = nil;
if (manager == nil) {
manager = [[Manager alloc] init];
}
return manager;
}
#pragma mark --- 多線程單例寫法----
+ (Manager *)sharesInstance{
static Manager *manager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[Manager alloc] init];
});
return manager;
}
二、Swift中單例的寫法
class SingleTon: NSObject {
var name:String?
//? swift單例第一種寫法
/*
格式: static let 名字:類型 = {
let instance = 類型()
return instance
}()
*/
static let shareSingleTon:SingleTon = {
let instance = SingleTon()
return instance
}()
//? 單例寫法二
/*
格式:static let instance = 類名()
class func shareSingleTon()->返回值類型
{
return instance
}
*/
static let instance = SingleTon()
class func shareSingTon()->SingleTon {
return instance
}
}
//? Swift單例方法的調(diào)用
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//? 單例方法一的調(diào)用
let mod1 = SingleTon.shareSingleTon
mod1.name = "張三"
let mod2 = SingleTon.shareSingleTon
print("mod2.name = \(mod2.name!)")
let mod3 = SingleTon.shareSingleTon
print("mod3.name = \(mod3.name!)")
//? 單例方法二的調(diào)用
let mode1 = SingleTon.shareSingTon()
mode1.name = "李四"
let mode2 = SingleTon.shareSingTon()
print("mode2.name = \(mode2.name!)")
let mode3 = SingleTon.shareSingTon()
print("mode3.name = \(mode3.name!)")
}
}