iOS设计模式之单例模式

单例模式:总是返回自己的同一个实例,它提供了对类的对象所提供的资源的全局訪问点,而且返回的实例仅仅能被实例化一次.

单例设计模式设计须要考虑的两个问题:

(1) :发起调用的对象不能以其它分配方式实例化单例对象,否则,就有可能创建单例类的多个实例

(2) :对单例对象实例化的限制应该与引用计数内存模型共存.

Singleton.h

#import <Foundation/Foundation.h>

@interface Singleton :
NSObject

+(Singleton *) sharedInstance;

@end

Singleton.m

#import "Singleton.h"

@implementation Singleton

static
Singleton *sharedSingleton =
nil;

+(Singleton *) sharedInstance{

if (sharedSingleton ==
nil) {

//sharedSingleton = [[Singleton alloc] init];

//     --------->>>>>(1)

//sharedSingleton = [[super allocWithZone:NULL] init];

/*

这里使用 super而不适用self的原因是self已经重载了allocWithZone方法

所以通过调用父类的方法,实现内存的分配

事实上allocWithZone方法内部调用的是NSAllocateObject方法

*/

//     --------->>>>>(2)

sharedSingleton = [NSAllocateObject([self
class], 0,
NULL)
init];

/*

第一个參数是
类的类型

第二个參数是
用于索引的实例变量的额外字节数,总是 0

第三个參数是
用于指定内存中分配的区域,一般为NULL,表示为默认区域

这里不适用(1)而使用(2)的原因是处理无论是实例化Singleton还是子类,都适用

*/

}

return
sharedSingleton;

}

/*

调用类的allocWithZone传入NSZone參数,为即将产生的新对象分配空间

重载的目的是当使用对象的alloc方法时不会产生新的实例

由于 alloc方法事实上调用的就是 allocWithZone:NULL方法,防止因 alloc而产生其它的实例

*/

+(id) allocWithZone:(struct
_NSZone *)zone{

return [[self
sharedInstance] retain];

}

/*

这里重载copyWithZone的目的,是防止使用 copy
方法时产生其它的实例

*/

-(id) copyWithZone:(NSZone *)zone{

return
self;

}

-(id) retain{

return
self;

}

-(NSUInteger) retainCount{

return
NSUIntegerMax;

}

-(void) release{

//什么也不做

}

-(id) autorelease{

return
self;

}

@end

时间: 2024-11-06 03:28:10

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

IOS设计模式之一(MVC模式,单例模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么翻译错误,请与我联系谢谢. iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不会太关注它. 在软件设计领域,设计模式是对通用问题

iOS.常用设计模式.01.单例模式

使用单例模式的类: UIApplication UIAccelerometer NSUserDefaults NSNotificationCenter NSFileManager NSBundle等 Singleton.h #import <Foundation/Foundation.h> @interface Singleton : NSObject // 始终返回同一个Singleton的指针 + (Singleton *)sharedManager; @property (strong,

iOS常用设计模式之单例模式

单例模式是iOS设计模式中常用的一种设计模式,它的意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点.单例模式的作用就是为了解决“应用中只有一个实例”这一类问题. 单例模式一般会封装一个静态属性,并提供静态实例的创建方法.下面上代码: // // Singleton.h // DesignPatternsDemo // // Created by 韩学鹏 on 15/6/19. // Copyright (c) 2015年 韩学鹏. All rights reserved. // #im

IOS设计模式之四(备忘录模式,命令模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 备忘录(Memento)模式 备忘录模式快照对象的内部状态并将其保存到外部.换句话说,它将状态保存到某处,过会你可以不破坏封装的情况下恢复对象的状态,也就是说原来对象中的私有数据仍然是私有的. 如何使用备忘录模式 在ViewController.m中增加

iOS设计模式

iOS设计模式,很多开发这都是听得多,但是有时候自己即使用过也不会很在意,开发者在写代码的时候也不会注意它. 在软件设计领域,设计模式是对通过问题的可复用的解决方案.设计模式是一系列帮你写出可理解和复用的模板,设计模式帮你创建松耦合的代码,你不需要花费太多就可以改变或者替换代码中的组件. (1)代理模式 应用场景:当一个类的某些功能需要由其他别的类别来实现的,但是又不确定是哪个类 优势:松耦合 实例:tableView的数据源delegate,通过和protocol的配合,完成委托. 列表row

iOS多线程技术—单例模式(ARC)与(MRC)

iOS多线程技术—单例模式(ARC) 一.简单说明: 设计模式:多年软件开发,总结出来的一套经验.方法和工具 java中有23种设计模式,在ios中最常用的是单例模式和代理模式. 二.单例模式说明 (1)单例模式的作用 :可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. (2)单例模式的使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次),应该让这个类创建出来的对象永远只有一个. (3)单例模式在ARC\MRC环

iOS 设计模式

Ios 设计模式,你可能听说过,但是你真正知道这是什么意思么?大部分的开发者大概都同意设计模式很重要,但是关于这一部分却没有很多的文章去介绍它,我们开发者很多时候写代码的时候也并不重视设计模式. 设计模式是在软件设计上去解决普通问题的可重用的方法.他们是是帮助你让所写的代码更加容易理解和提高可重用性的模板.它们还可以帮你创建松散耦合的代码是你能不费很大功夫就可以改变或者替代你的代码中的一部分. 如果你对设计模式感到生疏,那么我有个好消息告诉你!首先,你已经用了很多ios设计模式多亏了Cocoa

iOS设计模式 - 概述

最近可自由安排的时间比较多, iOS应用方面, 没什么好点子, 就先放下, 不写了.花点时间学学设计模式. 之后将会写一系列博文, 记录设计模式学习过程. 当然, 因为我自己是搞iOS的, 所以之后设计代码部分, 将尽量与objective-c相结合. iOS设计模式 - 概述           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40372113 一.定义 设计模式(Des

Java设计模式:单例模式

概念: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能