单例

转载 2015年11月20日 21:45:33
第一部分: 创建一个

 

单例的应用场景:

单例模式用于当一个类只能有一个实例的时候, 通常情况下这个“单例”代表的是某一个物理设备比如打印机,或是某种不可以有多个实例同时存在的虚拟资源或是系统属性比如一个程序的某个引擎或是数据。用单例模式加以控制是非常有必要的。

什么是单例模式?

单例是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。

(一

 

单例设计模式需要达到下面几个目的:1.)封装一个共享的资源; 2.)提供一个固定的实例创建方法; 3.)提供一个标准的实例访问接口

 

常用的定义单例的方法(ARC+GCD)

 

01.//实现一个创建单例对象的类方法
02. 
03.static ClassType *objName = nil; 
04. 
05.+ (ClassType *) sharedInstance{
06.static dispatch_once_t oneToken = 0;
07.dispatch_once(&onceToken, ^{
08.objName = [[super allocWithZone: NULL] init];
09.});
10.return objName; 
11.}
12. 
13.//重写几个方法,防止创建单例对象时出现错误
14.-(id) init{
15.If(self = [super init])
16.{
17.//初始化单例对象的各种属性
18.}
19.return self;
20.}
21. 
22.+(id)allocWithZone: (struct _NSZone *) zone{
23.return [self sharedInstance];
24.}
25. 
26.//这是单例对象遵循<NSCopying>协议时需要实现的方法
27.-(id) copyWithZone: (struct _NSZone *)zone{
28.return self;
29.}

第二部分:就地取材使用UIApplication单例

直接在AppDelegate中创建实例变量,然后在项目的其他文件中使用这些变量。

1.AppDelegate *appDelegate = (AppDelegate *)[[UIApplication shareApplication] delegate];
2.appDelegate.a = 10086;
3.appDelegate.globalString = @”中国想联通’;

 

这样,你可以定义一个全局实例变量。

详细请参考:http://blog.csdn.net/casablaneca/article/details/21074413

第三部分:在项目中使用单例设计模式

项目描述:我们希望通过一个button的点击事件触发单例对象中的一个属性值发生变化,然后使用KVO在ViewController的两个子视图(LeftView, RightView)上监听这个属性值得变化,并将变化后的数值在LeftView和RightView上显示出来。

 

1.) 在ViewController上设置一个button和一个触发事件

1.-(IBAction) refreshData: (id) sender{
2.//stockForKVO为单例对象
3.stockForKVO.price = arc4random()%100;
4.}

2.) 在LefeView和RightVIew的对象中使用KVO监听单例对象中属性值的变化

01.stockForKVO = [StockData sharedInstance];
02.[stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
03. 
04.//实现回调方法
05.- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{
06.if ([keyPath isEqualToString:@"price"]) {
07.showLabel.text = [NSString stringWithFormat:@"%f",stockForKVO.price];
08.NSLog(@" left change: %@", change);
09.}
10.}

3.)实现后的效果如图2所示

 

(图2),




 

图2: 下边为button事件触发后的场景,上边为初始化时的场景

相关文章推荐

Qt单例设计模式(1-8)

  • 2017年10月29日 12:05
  • 1.25MB
  • 下载

单例的实现

  • 2017年10月30日 10:48
  • 35KB
  • 下载

设计模式——单例(Java实现)

1. 前言单例(Singleton)应该是开发者们最熟悉的设计模式了,并且好像也是最容易实现的——基本上每个开发者都能够随手写出——但是,真的是这样吗?作为一个Java开发者,也许你觉得自己对单例模式...

host多线程下OpenCL平台等单例

  • 2017年08月16日 10:00
  • 6KB
  • 下载

Javascript 设计模式 单例

一直很喜欢Js,,,今天写一个Js的单例模式实现以及用法。 1、单例模式的写法 单例模式写法相当简单: var singleTon = { m1: "memeber ...

Spring In Action-3.2@Scope单例、多例Bean

  • 2017年09月06日 22:52
  • 13.59MB
  • 下载

单例的使用--弹出框

  • 2017年07月21日 13:14
  • 4KB
  • 下载

如何在Java中使用双重检查锁实现单例

本文由 ImportNew - 行云流水 翻译自 javacodegeeks。欢迎加入翻译小组。转载请见文末要求。 单例类在Java开发者中非常常用,但是它给初级开发者们造成了很多挑战。他们所面对的...

java 单例设计模式

  • 2014年10月07日 11:08
  • 126KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单例
举报原因:
原因补充:

(最多只允许输入30个字)