你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS Swift3 四種單例模式詳解及實例

IOS Swift3 四種單例模式詳解及實例

編輯:IOS開發綜合

Swift3 單例模式

常見的有這麼幾種方法

第一種簡單到爆的

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: () -> 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風格的單例,但是由於Swift3中廢棄了原來的dispatch_once_t,所以需要先給DispatchQueue添加一個extension,實現原先的dispatch_once_t效果

第三種

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

由於Swift3中加強了權限控制,導致如果重寫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() {} 
} 

在方法內定義靜態變量

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved