单例模式的解析-iOS

栏目: IOS · 发布时间: 7年前

内容简介:单例模式的解析-iOS其他设计模式的介绍1、简单工厂模式、工厂模式、抽象工厂模式的解析-iOS

单例模式的解析-iOS

其他 设计模式 的介绍

1、简单工厂模式、工厂模式、抽象工厂模式的解析-iOS 

2、建造者模式的解析-iOS 

3、单例模式的解析-iOS 

4、原型模式的解析-iOS 

5、代理模式的解析-iOS 

6、适配器模式的解析-iOS 

7、装饰器模式的解析-iOS 

8、外观模式的解析-iOS 

9、桥接模式的解析-iOS 

10、组合模式的解析-iOS

概率描述

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

实用场景

1、需要经常创建和销毁的实例对象。 

2、经常使用到的,创建的时候会消耗资源过多的。 

3、经常使用到的,创建的时候会很耗时的。 

4、一些有状态的 工具 类。

单利创建的几种方式

1、传统方法

//传统方式

-(instancetype)traditionSingleton{

    static SimpleFeedBack *singleton = nil;

    if (singleton == nil){

        singleton = [[SimpleFeedBack alloc] init];

    }

    return singleton;

}

2、GCD方式

//GCD方式

-(instancetype)gcdSingleton{

    static SimpleFeedBack *singleton = nil;

    //给单例加了一个线程锁

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        singleton = [[SimpleFeedBack alloc] init];

    });

    return singleton;

}

3、加锁方式

//加锁方式

+(SimpleFeedBack*)singleton {

    static SimpleFeedBack* singleton;

    @synchronized(self) {

        if (!singleton) {

            singleton = [[SimpleFeedBack alloc] init];

        }

        return singleton;

    }

    return nil;

}

案例解析

我们就以我们音乐app里面的统计数据的工具类。这个是符合我们适用场景里面的第4个情况,有状态的工具类;这个类每个需要用到网络的页面都需要使用,所以也符合我们的第1条,需要频繁创建和和销毁的实例对象。 

我们来看一下具体的代码:

+(FeedBack*)singleton {

    static FeedBack* singleton;

    @synchronized(self) {

        if (!singleton) {

            singleton = [[FeedBack alloc] init];

        }

        return singleton;

    }

    return nil;

}



- (id)init {

    self = [super init];

    if (self) {

            @synchronized(self)

            {

            //在这里面做一些初始化的操作,init方法自己可以定制。

            }

    }

    return self;

}

优缺点

优点 

1、单利会阻止其他的对象对自己实例化,在内存中只保存一份实例对象。保证了对唯一实例的受控访问。 

2、在内存中只存在一份实例,节省创建多个实例,从而节省的系统的资源

缺点 

1、往往我们使用的单利模式,在通常情况下,都不可能只一项职责,都是多项职责,这样在一定程度上面就违法了“单一职责的原则”。 

2、单利类的扩展很难,因为单利没有抽象层,所以在一定程度上扩展很难 

3、因为单利是一直存在内存里面的,如果该单利长时间不使用,他会被系统认为是垃圾而被回收,可能导致我们之前设置的一些状态被丢失掉。 

4、会导致内存溢出。

总结

如果有写的不正确或者侵权的,希望大家给我提出来,我会及时修改。谢谢大家。

--------------------- 

作者:小雅_yyq 

原文:https://blog.csdn.net/u014644610/article/details/80656298 


以上所述就是小编给大家介绍的《单例模式的解析-iOS》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高效团队开发

高效团队开发

[日] 池田尚史、[日] 藤仓和明、[日] 井上史彰 / 严圣逸 / 人民邮电出版社 / 2015-7 / 49.00

本书以团队开发中所必需的工具的导入方法和使用方法为核心,对团队开发的整体结构进行概括性的说明。内容涉及团队开发中发生的问题、版本管理系统、缺陷管理系统、持续集成、持续交付以及回归测试,并且对“为什么用那个工具”“为什么要这样使用”等开发现场常有的问题进行举例说明。 本书适合初次接手开发团队的项目经理,计划开始新项目的项目经理、Scrum Master,以及现有项目中返工、延期问题频发的开发人......一起来看看 《高效团队开发》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器