美文网首页
基础二:安全的单例模式

基础二:安全的单例模式

作者: 写下岁月的痕迹 | 来源:发表于2018-07-23 18:03 被阅读0次

1、首先,我们来了解一下什么是单例模式?单例模式是在整个应用程序中只被初始化一次,且是该类的唯一的实例。它的优点:易于外界访问;费时省内存;线程安全。缺点:责任过重;不易扩展;长时间未使用,系统会回收,导致对象的状态丢失。

2、代码如下:

static XXXClass *_instance = nil;
+ (instancetype)shareInstance {
    if (!_instance) {
        _instance = [[super alloc] init];
    }
    
    return _instance;
}
//调用alloc方法时,OC内部会调用allocWithZone这个方法来申请内存,此时我们可重写此方法。
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
    static dispatch_once_t onceToken;
    //保证只初始化一次
    dispatch_once(&onceToken, ^{
        if (!_instance) {
            _instance = [super allocWithZone:zone];
        }
    });
    
    return _instance;
}

- (id)copy {
    return _instance;
}

- (id)mutableCopy {
    return _instance;
}

最后,为什么我们需要创建安全的单例模式呢?那是因为防止外部通过alloc和init以及copy来构造对象这种现象。

参考链接:https://blog.csdn.net/Nirvana_666/article/details/51854463
https://www.jianshu.com/p/d07298613f86
http://blog.jimmyis.in/dispatch_once/

相关文章

  • 基础二:安全的单例模式

    1、首先,我们来了解一下什么是单例模式?单例模式是在整个应用程序中只被初始化一次,且是该类的唯一的实例。它的优点:...

  • Java 常用单例

    一、线程不安全的单例模式 二、线程安全且高效的单例模式 1.双重校验锁 2.静态内部类

  • 实现单例模式的方式2

    方式一: 能保证线程安全 定义类的时候实现单例模式 方式二: 能保证线程安全 对已定义好的类实现单例模式

  • 设计模式

    手写单例模式(线程安全) 你知道几种设计模式?单例模式是什么?Spring中怎么实现单例模式?

  • 单例模式安全之反射攻击

    单例模式安全之反射攻击 源码 单例模式这里就不谈了,什么是单例模式可参考七种Java单例模式详解,这里是关于单例模...

  • 基础设计模式:单例模式+工厂模式+注册树模式

    基础设计模式:单例模式+工厂模式+注册树模式 单例模式: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象...

  • Singleton 单例模式

    饿汉式单例模式 饿汉式单例模式 通过静态代码块增加异常处理 懒汉式单例模式 存在线程安全问题 懒汉式单例模式 解决...

  • 05.单例模式(创建型)

    创建型模式-单例模式 一、饿汉式单利模式 饿汉式不需要考虑线程安全问题。 饿汉式比较浪费资源 二、懒汉式单例模式 ...

  • Unity3d游戏开发之-单例设计模式- 单例模式二:多线程二(

    单例模式4:多线程二(双重锁定)这种双重锁定考虑了线程安全,是正规写法 游戏常用设计模式之单例设计模式的写法大概常...

  • Java中单例模式的五种实现方式

    1,基础概念 Java中单例模式是一种比较常见的设计模式,单例模式的种类有:饿汉式单例、懒汉式单例、登记式单例三种...

网友评论

      本文标题:基础二:安全的单例模式

      本文链接:https://www.haomeiwen.com/subject/evpjmftx.html