IOS Swift3 四種單例模式詳解及實(shí)例
Swift3 單例模式
常見的有這么幾種方法
第一種簡單到爆的
final class Single: NSObject { static let shared = Single() private override init() {} }
final關(guān)鍵字的作用是這個類或方法不希望被繼承和重寫
第二種
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中廢棄了原來的dispatch_once_t,所以需要先給DispatchQueue添加一個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()方法會報錯,所以這種寫法在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)變量
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
iOS ScrollView實(shí)現(xiàn)自動布局的方法(適用Swift 3.0 )
傳說中有一個美工ios開發(fā)者在遇到這個問題的時候特意跑到蘋果總部去咨詢?nèi)绾螌crollview進(jìn)行自動布局。當(dāng)然大家不用去了,下面這篇文章就來給大家介紹關(guān)于iOS ScrollView實(shí)現(xiàn)自動布局的方法,文中的語法同樣也適用Swift 3.0 ,需要的朋友可以參考下。2017-12-12IOS 簽名錯誤codesign failed with exit code 1解決方法
這篇文章主要介紹了IOS 簽名錯誤codesign failed with exit code 1解決方法的相關(guān)資料,遇到同樣問題的朋友可以看下,這里提供了解決方案,需要的朋友可以參考下2017-01-01詳解iOS中position:fixed吸底時的滑動出現(xiàn)抖動的解決方案
這篇文章主要介紹了詳解iOS中position:fixed吸底時的滑動出現(xiàn)抖動的解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12iOS實(shí)現(xiàn)攝像頭實(shí)時采集圖像
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)攝像頭實(shí)時采集圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-04-04圖文講解如何解決App的iOS 7頂部狀態(tài)欄適配問題
至今很多iOS App還要照顧到iOS 7進(jìn)行最低的版本適配,而iOS7開始status bar的實(shí)際屏幕占用情況與iOS 6等不盡相同,這里我們就來以圖文講解如何解決App的iOS 7頂部狀態(tài)欄適配問題2016-06-06Flutter繪制3.4邊形及多邊形漸變動畫實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Flutter繪制3.4邊形之多邊形漸變動畫實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08UITableViewCell在編輯狀態(tài)下背景顏色的修改方法
這篇文章主要給大家介紹了關(guān)于UITableViewCell在編輯狀態(tài)下背景顏色的修改方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-07-07