文档章节

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是为了保证我们单例的线程级别的安全,可以适用于多线程模式下。

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



© 著作权归作者所有

共有 人打赏支持
求是科技
粉丝 90
博文 438
码字总数 225859
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

申请Let's Encrypt永久免费SSL证书

环境安装 1、安装git yum install git-core 2、安装python 系统自带 不用安装 只要版本大于2.7即可。 获取Let's Encrypt免费SSL证书 先停止nginx 在阿里云安全组里加入 443端口的入规则 git ...

HGMrWang
29分钟前
1
0
如何使用playframework进行更好的开发

1: 自定义基类Controller 相信刚开始使用Play的人写的Controller 都继承于 play.mvc.Controller , 但这并不是一个很好的选择,自建基类Controller可以扩展更多的功能。 1.1 验证功能。 后台...

tuerqidi
34分钟前
4
0
解决ubuntu下root用户 不能ftp登陆的问题

解决ubuntu下root用户 不能ftp登陆的问题 一般情况下,由于种种原因ftp是不让root用户远程登陆,但只要你修改以个文件就可以登陆了. 注释掉 /etc/ftpusers 中的root即可 (最后重启vsftpd serv...

15834278076
46分钟前
0
0
《JavaScript高级程序设计(第3版)》阅读笔记

第6章 面向对象的程序设计 6.2 创建对象 6.2.1 工厂模式 JavaScript创建对象(一)—— 工厂模式 6.2.2 构造函数模式 JavaScript创建对象(二)——构造函数模式 6.2.3 原型模式 JavaScript...

Bob2100
51分钟前
1
0
Windows小技巧 – Win+R提高Windows使用效率

追求效率的朋友都需要一款顺手的快速启动工具,Win 平台上有键盘流的RunZ、Listary、ALTRun、Launchy、Wox 和图标流的 Fences、Rolan、 WinLaunch 等,而 Mac 上也有 Alfred、Spotlight。 而...

QQZZFT
53分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部