static let sharedTools3 = SoundTools()
override init() {
print("創建")
super.init()
}
// 靜態區的對象只能設置一次數值
// Swift 中的的單例寫法和懶加載幾乎一樣 `static let`
// 同樣也是在第一次使用時,纔會創建對象
static let sharedTools2: SoundTools = {
print("創建聲音對象")
return SoundTools()
}()
// 以下代碼仿 OC 的寫法!
// 在 Swift 中不允許在函數中定義靜態成員
static var instance: SoundTools?
static var onceToken: dispatch_once_t = 0
// 1. 提供全局的訪問點
class func sharedTools() -> SoundTools {
dispatch_once(&onceToken) { () -> Void in
instance = SoundTools()
}
return instance!
}
}
////////////////////////////////
// 面試的時候,手寫單例就寫以下部分即可!
+ (instancetype)sharedTools {
static id instance;
// dispatch_once {
// instance = [[self alloc] init];
// }
// 如果爲 0,就執行 block 中的代碼!
static dispatch_once_t onceToken;
NSLog(@"---> %ld", onceToken);
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}