Swift3.0 单例实战

概述

整个应用生命周期中,只存在唯一一个实例对象的类被称作单例,所以的模块共同使用这一个对象的设计叫做单例模式

单例模式的特点和创建方式:

  • 实例对象唯一,所以多个模块共同使用保证了数据唯一性。
  • 有较强的灵活性。
  • final关键字修饰的class、var、func标示不可被操作,继承,重写非常适合优化单例。
  • Swift3.0开始放弃了dispatch_once,创建单例方式有:
final class LLNetwork: NSObject {
    static let shareInstace = LLNetwork.init()
    // 保证只有当前才能访问
    private override init(){}
}

OC单例

  • 方法一
+ (nonnull instancetype)sharedInstance {
    static id instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}
  • 方法二
+ (nonnull instancetype)sharedInstance {
    static id instance = nil;
    @synchronized (self) { //保证线程安全
        if (!instance) {
            instance = [[self alloc] init];
        }
    }
    return instance;
}

总结

单例保证了数据在应用运行期间的唯一性,减少了重复内存的损耗,如果单例本身内存占用过大时,要重新考虑这个模式是否适合了。另一方面,单例的访问也存在着多线程安全的问题,这需要我们合理的使用线程锁来保证单例的安全性了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,427评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,946评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,526评论 25 709
  • 位於蘇格蘭北部高地的Ackergill Tower是壹座至今仍然完好保留的古堡,建築學家認為它的歷史可以追溯到十五...
    潼行記阅读 1,293评论 3 3
  • 今天晚上带小宝去诊所看病,看到一对五岁左右的龙凤胎兄妹,都戴着厚厚的镜片。我在一旁叹息,小小年纪视力就出了问题。 ...
    houpanpan926阅读 3,398评论 1 3