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

基础二:安全的单例模式

作者: 写下岁月的痕迹 | 来源:发表于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/

    相关文章

      网友评论

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

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