Swift 單例模式

常見的有這么4種方法

第一種簡單到爆的

final class Single: NSObject {  
    static let shared = Single()  
    private override init() {}  
}  

final關鍵字的作用是這個類或方法不希望被繼承和重寫

第二種

public extension DispatchQueue {  
    private static var onceToken = [String]()  
    public class func once(_ token: String, _ block:@escaping () -> 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("YouShaoduo") {  
            Singleton.single = shared()  
        }  
        return Singleton.single  
    }  
      
    private override init() {}  
} 

完全是OC風格的單例,但是由于Swift3中廢棄了原來的dispatch_once_t,所以需要先給DispatchQueue添加一個extension,實現(xiàn)原先的**dispatch_once_t效果

第三種

private let single = Single3()  
final class Single3: NSObject {  
    static var shared: Single3 {  
        return single  
    }  
      
    fileprivate override init() {}  
} 

第四種

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)變量

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容