IOS Swift3 四種單例模式詳解及實(shí)例
Swift3 單例模式
常見(jiàn)的有這么幾種方法
第一種簡(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 )
傳說(shuō)中有一個(gè)美工ios開(kāi)發(fā)者在遇到這個(gè)問(wèn)題的時(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-12IOS 簽名錯(cuò)誤codesign failed with exit code 1解決方法
這篇文章主要介紹了IOS 簽名錯(cuò)誤codesign failed with exit code 1解決方法的相關(guān)資料,遇到同樣問(wèn)題的朋友可以看下,這里提供了解決方案,需要的朋友可以參考下2017-01-01詳解iOS中position:fixed吸底時(shí)的滑動(dòng)出現(xiàn)抖動(dòng)的解決方案
這篇文章主要介紹了詳解iOS中position:fixed吸底時(shí)的滑動(dòng)出現(xiàn)抖動(dòng)的解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12iOS實(shí)現(xiàn)攝像頭實(shí)時(shí)采集圖像
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)攝像頭實(shí)時(shí)采集圖像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04圖文講解如何解決App的iOS 7頂部狀態(tài)欄適配問(wèn)題
至今很多iOS App還要照顧到iOS 7進(jìn)行最低的版本適配,而iOS7開(kāi)始status bar的實(shí)際屏幕占用情況與iOS 6等不盡相同,這里我們就來(lái)以圖文講解如何解決App的iOS 7頂部狀態(tài)欄適配問(wèn)題2016-06-06ios12中遇到的帶input彈窗的錯(cuò)位問(wèn)題的解決方法
這篇文章主要介紹了ios12中遇到的帶input彈窗的錯(cuò)位問(wèn)題的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05Flutter繪制3.4邊形及多邊形漸變動(dòng)畫實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Flutter繪制3.4邊形之多邊形漸變動(dòng)畫實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08UITableViewCell在編輯狀態(tài)下背景顏色的修改方法
這篇文章主要給大家介紹了關(guān)于UITableViewCell在編輯狀態(tài)下背景顏色的修改方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-07-07