iOS 设计模式之单例

设计模式:

一.  单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

单例模式的要点有三个:一是某个类只能有一个实例,二是它必须自行创建这个实例,三是它必须自行向整个系统提供这个实例。

二.单例模式结构图:

三. 单例的好处:

1.实例控制:单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。

2.灵活性:因为类控制了实例化过程,所以类可以灵活更改实例化过程

四.单例DEMO

单例的创建

.h文件

#import <Foundation/Foundation.h>

@interface Oneexample : NSObject<NSCopying>

+ (id) Oneexample;

@end

.m文件

先创建一个静态的类对象将他设为空

static Oneexample * oneexample = nil;

+ (id) Oneexample

{

//双重锁机制

if (oneexample == nil)//避免多次加锁

{

@synchronized(self)//一次只允许进入一个

{

if(oneexample == nil)

{

oneexample = [[[self class] alloc] init];

}

}

}

return oneexample;

}

一般来说我们写到现在就已经将单例创建出来了

但是由于单例是唯一的,我们自己创建的单例自己用时知道其用法,但是其他人用时不知到我们创建单例但方法,计入其使用了new alloc copy 就会创建出新的对象,这样我们创建的单例就显得毫无意义了,为了避免这种情况我们就需要在重新设置一下他的其他能够创建此对象的方法

设置new的方法

+ (id)new

{

return [self alloc];

}

设置alloc的方法

+ (id) allocWithZone:(NSZone *)zone

{

if (oneexample == nil)

{

@synchronized(self)

{

if (oneexample == nil)

{

oneexample = [super allocWithZone:zone];

}

}

}

return nil;

}

设置copy的方法

- (id) copyWithZone:(NSZone *)zone

{

return oneexample;

}

- (id) mutableCopyWithZone:(NSZone *)zone

{

return [self copyWithZone:zone];

}

重新设置这几种能创建对象的方法以后,我们不管如何穿件对象都能够保证这个对象是一个单例,此时我们封装的单例才是完美无缺的

时间: 2024-08-04 02:36:00

iOS 设计模式之单例的相关文章

iOS设计模式之单例

单例模式的意思就是这个类只有一个实例,这个类就是单例类.在iOS中有不少都是单例NSNull,NSFileManager ,UIApplication,NSUserDefaults ,UIDevice,还有一些第三方也有能用到了这种设计模式例如Afhttpmanger... (1)单例模式的作用 :可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. (2)单例模式的使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次

OC中的单例设计模式及单例的宏抽取

1 // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 2 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 3 4 #pragma Person.h文件 5 6 #import <Foundation/Foundation.h> 7 @interface Person : NSObject <NSCopying,NSMutableCopying> 8 + (instancetype)sharePerson; // 给类提供一

设计模式 之 单例

单例模式(Singleton Pattern) 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 最近一直在用VB.NET重构机房收费系统,在重构中就出现了一个这样的问题: 每点击一次充值的菜单,都会出现一个新的充值窗体.我就希望它要么不出现,出现也只出现一个.这个就和我们今天讲的单例模式有关系了. 大家都知道,世界上的所有事物都是独一无二的,也就是说没有哪两个事物是完全相同的.从这个角度来讲,每一个事物相对于自身都是单例的.我们今天所讲的单例设计模式则有所区别,它是针对某一类事物来说,只

IOS开发模式——单例

单例的模式在网上有很多,今天发下我个人对单例模式的理解.整个app中只存在一个实例,也只会进行一次实例,在实例完成之后是不可以人释放的(当App关闭之后,等系统自己回收). 也就是说,如果我们写得某个类符合了上述条件,那么我们也可以称这个类为单例. 在非ARC的工程中,我们需要针对alloc,retain,copy等会增加retaincount的参数加以控制,对release和autorelease等减少retailcount的操作增加控制,以确保单一实例,绝不释放. 在ARC的工厂中,由于,内

设计模式总纲——单例设计模式

前两天写了设计模式总纲,今天就来讲讲我们在工程代码中最最最常用的设计模式了——单例设计模式,这个模式在工程代码上的出现率几乎为99.99999%,但是虽然很常用,但是用的好的人却不多,今天我们就来深入的说一说单例设计模式. 在学习一项新的知识之前,我们都要向自己提出三个问题,为什么要用这个知识,这个知识用在哪里,这个知识怎么用?既 why,where,how,3W模式,我们先来谈谈为什么需要单例设计模式,先来想想,如果一个工具类,比如一个读取配置文件的工具类,这类工具只是特定的功能类,既读取指定

iOS Dev (67) 单例的实现

iOS Dev (67) 单例的实现 博客:http://blog.csdn.net/prevention 作者:大锐哥 摘自:Learn iPhone and iPad cocos2d Game Development 实现 在 .m 文件里 static MyManager *sharedManager = nil; +(MyManager*) sharedManager { if (sharedManager == nil) { sharedManager = [[MyManager al

java设计模式之单例设计模式

设计模式:解决某一类问题最行之有效的方法. java中23种设计模式. 单例设计模式:解决一类在内存中只存在一个对象. Runtime()方法就是单例设计模式进行设计的. 解决的问题:保证一个类在内存中的对象唯一性. 比如:多程序读取一个配置文件时,建议配置文件封装成对象.会方便操作其中数据,又要保证多个程序读到的是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的. 1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象. 2.还为了让其他程序可以访问该类对象,只好在本类中自定

设计模式之-----------单例设计模式

饿汉式: class Single { //   提前做好! private static final Single s = new Single(); //  私有化 构造函数  无法使用new 创建对象! private Single(){} //  对外提供接口 public static Single getInstance() { return s; } } 懒汉式: 懒汉 顾名思义  就是懒呗 什么时候用到 什么时候创建! class Single1 { private static

java软件设计模式只单例设计模式

概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 设计模式分为三种类型,共23种.创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式.结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.