IOS  Swift3 四种单例模式详解及实例

 更新时间:2016年12月24日 11:07:55   作者:ParadiseMayCry  
这篇文章主要介绍了IOS Swift3 四种单例模式详解及实例的相关资料,这里对四种单例模式进行了实例介绍 ,需要的朋友可以参考下

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() {} 
} 

在方法内定义静态变量

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • iOS 加载Bundle文件的实例代码

    iOS 加载Bundle文件的实例代码

    这篇文章主要介绍了iOS 加载Bundle文件的实例代码,代码简单易懂,非常不错,需要的朋友参考下
    2016-12-12
  • iOS10适配(必看)

    iOS10适配(必看)

    这篇文章主要介绍了iOS10适配(必看)的相关资料,本文图文并茂介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • iOS ScrollView实现自动布局的方法(适用Swift 3.0 )

    iOS ScrollView实现自动布局的方法(适用Swift 3.0 )

    传说中有一个美工ios开发者在遇到这个问题的时候特意跑到苹果总部去咨询如何对scrollview进行自动布局。当然大家不用去了,下面这篇文章就来给大家介绍关于iOS ScrollView实现自动布局的方法,文中的语法同样也适用Swift 3.0 ,需要的朋友可以参考下。
    2017-12-12
  • IOS 签名错误codesign failed with exit code 1解决方法

    IOS 签名错误codesign failed with exit code 1解决方法

    这篇文章主要介绍了IOS 签名错误codesign failed with exit code 1解决方法的相关资料,遇到同样问题的朋友可以看下,这里提供了解决方案,需要的朋友可以参考下
    2017-01-01
  • 详解iOS中position:fixed吸底时的滑动出现抖动的解决方案

    详解iOS中position:fixed吸底时的滑动出现抖动的解决方案

    这篇文章主要介绍了详解iOS中position:fixed吸底时的滑动出现抖动的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • iOS实现摄像头实时采集图像

    iOS实现摄像头实时采集图像

    这篇文章主要为大家详细介绍了iOS实现摄像头实时采集图像,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • 图文讲解如何解决App的iOS 7顶部状态栏适配问题

    图文讲解如何解决App的iOS 7顶部状态栏适配问题

    至今很多iOS App还要照顾到iOS 7进行最低的版本适配,而iOS7开始status bar的实际屏幕占用情况与iOS 6等不尽相同,这里我们就来以图文讲解如何解决App的iOS 7顶部状态栏适配问题
    2016-06-06
  • ios12中遇到的带input弹窗的错位问题的解决方法

    ios12中遇到的带input弹窗的错位问题的解决方法

    这篇文章主要介绍了ios12中遇到的带input弹窗的错位问题的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Flutter绘制3.4边形及多边形渐变动画实现示例

    Flutter绘制3.4边形及多边形渐变动画实现示例

    这篇文章主要为大家介绍了Flutter绘制3.4边形之多边形渐变动画实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • UITableViewCell在编辑状态下背景颜色的修改方法

    UITableViewCell在编辑状态下背景颜色的修改方法

    这篇文章主要给大家介绍了关于UITableViewCell在编辑状态下背景颜色的修改方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-07-07

最新评论