IOS Swift3 四種單例模式詳解及實(shí)例
Swift3 單例模式
常見的有這么幾種方法
第一種簡(jiǎn)單到爆的
final class Single: NSObject {
static let shared = Single()
private override init() {}
}
final關(guān)鍵字的作用是這個(gè)類或方法不希望被繼承和重寫
第二種
public extension DispatchQueue {
private static var onceToken = [String]()
public class func once(_ token: String, _ block: () -> Void) {
objc_sync_enter(self)
defer {
objc_sync_exit(self)
}
if onceToken.contains(token) {
return
}
onceToken.append(token)
block()
}
}
final class Single2: NSObject {
static func shared() -> Single2 {
struct Singleton {
static var single: Single2?
}
DispatchQueue.once(NSUUID().uuidString) {
Singleton.single = shared()
}
return Singleton.single!
}
}
第二種完全是OC風(fēng)格的單例,但是由于Swift3中廢棄了原來(lái)的dispatch_once_t,所以需要先給DispatchQueue添加一個(gè)extension,實(shí)現(xiàn)原先的dispatch_once_t效果
第三種
private let single = Single3()
final class Single3: NSObject {
static var shared: Single3 {
return single
}
}
由于Swift3中加強(qiáng)了權(quán)限控制,導(dǎo)致如果重寫private override init()方法會(huì)報(bào)錯(cuò),所以這種寫法在Swift3中的安全性未知。
第四種
final class Single4: NSObject {
static var shared: Single4 {
struct Static {
static let instance: Single4 = Single4()
}
return Static.instance
}
private override init() {}
}
在方法內(nèi)定義靜態(tài)變量
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
iOS ScrollView實(shí)現(xiàn)自動(dòng)布局的方法(適用Swift 3.0 )
傳說中有一個(gè)美工ios開發(fā)者在遇到這個(gè)問題的時(shí)候特意跑到蘋果總部去咨詢?nèi)绾螌?duì)scrollview進(jìn)行自動(dòng)布局。當(dāng)然大家不用去了,下面這篇文章就來(lái)給大家介紹關(guān)于iOS ScrollView實(shí)現(xiàn)自動(dòng)布局的方法,文中的語(yǔ)法同樣也適用Swift 3.0 ,需要的朋友可以參考下。2017-12-12
IOS 簽名錯(cuò)誤codesign failed with exit code 1解決方法
這篇文章主要介紹了IOS 簽名錯(cuò)誤codesign failed with exit code 1解決方法的相關(guān)資料,遇到同樣問題的朋友可以看下,這里提供了解決方案,需要的朋友可以參考下2017-01-01
詳解iOS中position:fixed吸底時(shí)的滑動(dòng)出現(xiàn)抖動(dòng)的解決方案
這篇文章主要介紹了詳解iOS中position:fixed吸底時(shí)的滑動(dòng)出現(xiàn)抖動(dòng)的解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-12-12
iOS實(shí)現(xiàn)攝像頭實(shí)時(shí)采集圖像
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)攝像頭實(shí)時(shí)采集圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
圖文講解如何解決App的iOS 7頂部狀態(tài)欄適配問題
至今很多iOS App還要照顧到iOS 7進(jìn)行最低的版本適配,而iOS7開始status bar的實(shí)際屏幕占用情況與iOS 6等不盡相同,這里我們就來(lái)以圖文講解如何解決App的iOS 7頂部狀態(tài)欄適配問題2016-06-06
ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法
這篇文章主要介紹了ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-05-05
Flutter繪制3.4邊形及多邊形漸變動(dòng)畫實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Flutter繪制3.4邊形之多邊形漸變動(dòng)畫實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
UITableViewCell在編輯狀態(tài)下背景顏色的修改方法
這篇文章主要給大家介紹了關(guān)于UITableViewCell在編輯狀態(tài)下背景顏色的修改方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-07-07

