文档章节

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

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



© 著作权归作者所有

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
3
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部