Swift中的單例

項目開發中往往經常使用單例模式,單例的目的:

  • 內存中只有一個對象實例
  • 提供一個全局訪問點

OC 中的單例寫法

+ (instancetype)sharedManager {
    static id instance;
    static dispatch_once_t onceToken;
    NSLog(@"%ld", onceToken);
//onceToken默認等于0,如果是0就會執行block,如果不是0就不會執行
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

Swift 中的單例

static var instance: NetworkTools?
static var token: dispatch_once_t = 0
/// 在 swift 中類變量不能是存儲型變量
class var sharedNetworkTools: NetworkTools {
    dispatch_once(&token, { () -> Void in
        self.instance = NetworkTools()
    })
    return self.instance!
}

不過!在 Swift 中 let 本身就是線程安全的

改進過的單例代碼

private static let instance = NetworkTools()
/// 在 swift 中類變量不能是存儲型變量
class var sharedNetworkTools: NetworkTools {
    return instance
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容