美文网首页
iOS设计模式之单例模式

iOS设计模式之单例模式

作者: 窗内户外 | 来源:发表于2019-03-13 18:41 被阅读0次

    一、简介

      保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    
    百度百科

    二、实用场景

    1、需要经常创建和销毁的实例对象。
    2、经常使用到的,创建的时候会消耗资源过多的。
    3、经常使用到的,创建的时候会很耗时的。
    4、一些有状态的工具类。

    三、使用

    #import "Singleton.h"
    
    static Singleton * _instance = nil;
    @implementation Singleton
    
    +(instancetype)allocWithZone:(struct _NSZone *)zone{
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [super allocWithZone:zone ];
        });
        return _instance;
    }
    
    +(instancetype) sharedInstance{
        if (_instance == nil) {
            _instance = [[super alloc]init];
        }
        return _instance;
    }
    
    -(id)copyWithZone:(NSZone *)zone{
        return _instance;
    }
    
    -(id)mutableCopyWithZone:(NSZone *)zone{
        return _instance;
    }
    

    四、总结

    只有一份实例,不可滥用;不好扩展;可能丢失数据;内存溢出;违背了单一职责原则。

    优点

    1、在内存中只存在一份实例,节省创建多个实例,从而节省的系统的资源,另外使用GCD的方式是线程安全的。

    缺点

    1、往往我们使用的单利模式,在通常情况下,都不可能只一项职责,都是多项职责,这样在一定程度上面就违法了“单一职责的原则”。
    2、单利类的扩展很难,因为单利没有抽象层,所以在一定程度上扩展很难
    3、因为单利是一直存在内存里面的,如果该单利长时间不使用,他会被系统认为是垃圾而被回收,可能导致我们之前设置的一些状态被丢失掉。
    4、会导致内存溢出。

    相关文章

      网友评论

          本文标题:iOS设计模式之单例模式

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