iOS设计模式之单例模式

一、简介

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

二、实用场景

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、会导致内存溢出。

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