文档章节

iOS设计模式--单例模式

求是科技
 求是科技
发布于 2015/03/04 15:27
字数 654
阅读 67
收藏 1

单例模式使用频率非常高,通过一个单例类,可以实现在不同文件之间传递数据。

单例模式应用场景:

  1. Windows的Task Manager(任务管理器)就是典型的单例应用,在整个系统运行过程中我们只能打开一个任务管理器。

  2. 网站的计数器,一般也采用单例模式实现,否则很难实现同步。

  3. 应用程序的日志文件,也采用单例模式实现,由于共享日志文件一直处于打开状态,因为只能有一个实例去操作它,否则,多个对象操作时,内容不好追加。

  4. Web应用的配置文件,这是因为配置文件是共享的资源。

  5. 数据库连接池的设计一般也采用单例模式,因为数据库连接也是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省 打开/关闭数据库连接所引起的效率损耗,因此采用单例模式来维护,可以大大降低损耗。

  6. 多线程的线程池的设计也采用单例模式,原因如上。

  7. 操作系统的文件系统也是单例模式的例子,一个操作系统只能有一个文件系统。

总结,单例模式应用场景一般发生在以下条件:

1>资源共享情况下,避免由于资源操作时导致的性能或损耗等,如上文的日志文件、应用配置等。

2>控制资源情况,方便资源之间的相互通信,如线程池等。


IOS中的单例模式

在objective-c中要实现一个单例类,需要完成如下四个步骤:

  1. 为单例对象实现一个静态实例,并初始化,将其设置成nil

  2. 实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是,则新建并返回一个本类的实例。

举实际例子:为RootViewController创建一个单例

@implementation RootViewController
static RootViewController *shareRootViewController = nil;
+(RootViewController *)sharedInstance
{
    @synchronized(self)
        {
            if(shareRootViewController == nil)
                {
                    shareRootViewController = [[self alloc] init];
                }
        }
        return shareRootViewController; 
}

如上代码中,用到了关键字@synchronized是为了保证我们单例的线程级别的安全,可以适用于多线程模式下。

至此,单例模式介绍完毕。



© 著作权归作者所有

共有 人打赏支持
求是科技
粉丝 91
博文 439
码字总数 226317
作品 0
成都
后端工程师
私信 提问
如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊
05/26
0
0
设计模式2——Factory设计模式

Factory工厂设计模式为创建对象提供了一种抽象,而对使用者屏蔽了对象创建的具体细节过程,工厂模式有三种:简单工厂模式,抽象工厂模式和工厂方法模式。 1. 简单工厂模式: 又叫静态工厂模式...

小米米儿小
2013/12/05
0
0
iOS设计模式(代码分析系列2:简单工厂模式)

简单工厂模式示例代码下载地址, 1、简述 首先需要说明一下,简单工厂模式不属于23种GOF设计模式之一。它也称作静态工作方法模式,是工厂方法模式的特殊实现(也就是说工厂模式包含简单工厂模...

召唤攻城狮
2014/09/09
0
0
总结一些IOS的面试题吧~不定期更新~附带个人理解的“参考”答案哈

除了MVC模式 你还熟悉什么设计模式 代理模式:当一个类的某些功能需要由别的类实现,但是又不确定具体是哪个类实现的 单例模式:当确保程序运行期间,某个类只有一份实例,用于进行资源共享 ...

RainOrz
2015/08/18
0
0
IOS 代理模式delgate

IOS代理模式是一个类调用另一个类的方法去操作。官方是这么说的,好多教程也这么讲。但是具体怎么样呢?例如两个UIView进行变量值传递。最明显的登录成功,登录成功当前控制器已经完成任务,...

常思过
2013/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
50分钟前
1
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
53分钟前
1
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
1
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
1
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部