单例模式是iOS常用设计模式中的一种。单例设计模式的作用是使得这个类的一个对象成为系统中的唯一实例,因此需要用一种唯一的方法去创建这个对象并返回这个对象的地址。那么,我们何时使用单例模式呢?1、类只能有一个实例,而且必须从一个为人熟知的访问点对其访问。2、这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。
那么用Objective-C如何实现单例模式呢?下面我们来新建一个Singleton类,在Singleton.h中实现如下
- @interface Singleton : NSObject
- + (Singleton *) sharedInstance;
- @end
在Singleton.m
- @implementation Singleton
- static Singleton * sharedSingleton = nil;
- + (Singleton *) sharedInstance
- {
- if (sharedSingleton == nil) {
- sharedSingleton = [[Singleton alloc] init];
- }
- return sharedSingleton;
- }
- @end
下面我对Singleton.m的进行改进
- @implementation Singleton
- static Singleton * sharedSingleton = nil;
- + (Singleton *) sharedInstance
- {
- if (sharedSingleton == nil) {
- sharedSingleton = [[super allocWithZone:NULL] init];
- }
- return sharedSingleton;
- }
- + (id) allocWithZone:(struct _NSZone *)zone
- {
- return [[self sharedInstance] retain];
- }
- - (id) copyWithZone:(NSZone *) zone
- {
- return self;
- }
- - (id) retain
- {
- return self;
- }
- - (NSUInteger) retainCount
- {
- return NSUIntegerMax;
- }
- - (void) release
- {
- //
- }
- - (id) autorelease
- {
- return self;
- }
- @end